Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

  • Закрытая тема Тема закрыта

Как узнать тип загружаемого файла?

#1 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71
0

Отправлено 12 Февраль 2010 - 14:11

при условии, что файл сначала загружается во временную директорию?

а как узнать размер длина и ширина изображения при загрузке изображения во временную папку?
т.е. поставить ограничение на размер загружаемого файла и тип расширения.

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Февраль 2010 - 23:03

sc2r2bey,
Допустим, что мы имеем форму:
<form action="обработчик" method="post" enctype="multipart/form-data">
<input type="file" name="upload_file" />
<input type="submit" value="Загрузить" />
</form>


Затем, при переходе на обработчик, мы имеем:
$_FILES['upload_file']['name']; // имя файла до его отправки на сервер, например, image.gif
$_FILES['upload_file']['size']; // размер принятого файла в байтах
$_FILES['upload_file']['type']; // MIME-тип принятого файла (если браузер смог его определить), например: image/gif, image/png, image/jpeg, text/html


Изначально надо обращать внимание на настройки некоторых директив сервера и PHP
Конфигурационный файл PHP php.ini имеет три параметра, связанные с загрузкой файлов на сервер:
  • file_uploads=On - разрешает загрузку файлов на сервер по протоколу HTTP;
  • upoad_tmp_dir=/tmp - устанавливает каталог для временного хранения загруженных файлов;
  • upload_max_filesize=2M - устанавливает максимальный объем загружаемых файлов.
Размеры картинки(если это картинка), можно узнать с помощью функции getimagesize()
Пусть она даже будет загружена во временный каталог, главное правильно путь указать ;)
  • 0

#3 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 12 Февраль 2010 - 23:04

sc2r2bey,
вот Пример реализации загрузки картинок на сервер. ( взято со страницы http://phpclub.ru/de.../article/upload )

<?
$max_image_width = 380;
$max_image_height = 600;
$max_image_size = 64 * 1024;
$valid_types = array("gif","jpg", "png", "jpeg");

if (isset($_FILES["userfile"])) {
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
$filename = $_FILES['userfile']['tmp_name'];
$ext = substr($_FILES['userfile']['name'],
1 + strrpos($_FILES['userfile']['name'], "."));
if (filesize($filename) > $max_image_size) {
echo 'Error: File size > 64K.';
} elseif (!in_array($ext, $valid_types)) {
echo 'Error: Invalid file type.';
} else {
$size = GetImageSize($filename);
if (($size) && ($size[0] < $max_image_width)
&& ($size[1] < $max_image_height)) {
if (@move_uploaded_file($filename, "/www/htdocs/upload/")) {
echo 'File successful uploaded.';
} else {
echo 'Error: moving file failed.';
}
} else {
echo 'Error: invalid image properties.';
}
}
} else {
echo "Error: empty file.";
}
} else {
echo '
<form enctype="multipart/form-data" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="64000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>';
}
?>


  • 0

#4 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 12 Февраль 2010 - 23:14

мне надо проверить, чтоб загружались изображения с расширением jpg не больше размера 800 на 800 пикселей
  • 0

#5 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 12 Февраль 2010 - 23:23

sc2r2bey,
в чем проблема?
Задаешь

$max_image_width = 800;
$max_image_height = 800;
$valid_types = array("jpg", "jpeg");
а проверку на размер файла убираешь, если не нужна:
<?php
$max_image_width = 800;
$max_image_height = 800;
$valid_types = array("jpg", "jpeg");

if (isset($_FILES["userfile"])) {
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
$filename = $_FILES['userfile']['tmp_name'];
$ext = substr($_FILES['userfile']['name'],
1 + strrpos($_FILES['userfile']['name'], "."));
if (!in_array($ext, $valid_types)) {
echo 'Error: Invalid file type.';
} else {
$size = GetImageSize($filename);
if (($size) && ($size[0] < $max_image_width)
&& ($size[1] < $max_image_height)) {
if (@move_uploaded_file($filename, "/www/htdocs/upload/")) {
echo 'File successful uploaded.';
} else {
echo 'Error: moving file failed.';
}
} else {
echo 'Error: invalid image properties.';
}
}
} else {
echo "Error: empty file.";
}
} else {
echo '
<form enctype="multipart/form-data" method="post">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>';
}
?>


  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Февраль 2010 - 23:45

yury, по расширениям не всегда правильно судить. Надо и MIME-type проверять
if( $_FILES['userfile']['type'] == "image/jpeg" )
{
// JPG по MIME-type
} else {
// НЕ JPG по MIME-type
}

  • 0

#7 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 12 Февраль 2010 - 23:52

говорят что MIME-type легко подделать
  • 0

#8 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 13 Февраль 2010 - 00:09

sc2r2bey, а расширение нет? Шутник...
Вообще самой хорошей защитой на серверах с ОС, поддерживающей разделение прав, является ограничение загружаемых файлов на исполнение (хотя сервера с этим иногда кривят)...
  • 0

#9 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 13 Февраль 2010 - 00:14

но у меня стоит задача загружать jpg изображение размером не менее 600 на 600 пикселей
но если exe переименовать в jpg и загрузить на сервер то он там не запуститься, да и nix он не запуститься если будут exe ;)
  • 0

#10 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 13 Февраль 2010 - 01:14

yury, по расширениям не всегда правильно судить. Надо и MIME-type проверять

ZiTosS, да.
Я сам хотел это сказать, но тут появилось сообщение от sc2r2bey, что ему нужно именно расширение контролить:

мне надо проверить, чтоб загружались изображения с расширением jpg не больше размера 800 на 800 пикселей

а в твоем сообщении, чуть раньше, ты показал, где хранится инфа про MIME-type - $_FILES['upload_file']['type']. И при необходимости можно легко добавить соответствующую проверку.

Потому я расслабился и потер свое недописанное замечание. ;)

ЗЫ
Кстати, по результатам проверки:
			 $size = GetImageSize($filename);
if (($size) && ($size[0] < $max_image_width)
&& ($size[1] < $max_image_height)) {
...
} else {
echo 'Error: invalid image properties.';
}
на файл-некартинку придет ругательство "Error: invalid image properties."
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru