[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Безопасная загрузка изображений.
Forever
Помогите разобрать тему загрузки изображений.
Что лишнее в скрипте ниже, а что нужно добавить/учитывать Какие ошибки допустил
Или, если там все надо сносить, покажите пожалуйста хороший пример загрузки.


Я пропустил такие моменты , как создание уникального имени для загружаемого файла и сохранение ссылки на него в бд. Шоб покороче.

P.S: скрытое поле MAX_FILE_SIZE имеет какой-нибудь смысл?
Я гружу огромные файлы, и ожидание загрузки все равно есть.

Так вот
$max_file_size = 500 *1024; //20 * 1024
$max_height = 640;
$max_width = 480;
$allowed = array ( 'image/jpeg', 'image/png');
$mime = mime_content_type($_FILES["image"]["tmp_name"]);
$site_path = "D:/usr/hosts/dota/www1";
$save_path = '/images/avatars/';


if (!isset($_FILES['image']) ) {
$err['img'] = 'Файл не был выбран.';
}
elseif (disk_free_space('/') < $max_file_size) {
$err['img'] = 'Извините, в данный момент на сайте недоступна функция загрузки фотографий ';
}
elseif ( !is_uploaded_file ($_FILES['image']['tmp_name'])
/*В документации PHP сказано, что в некоторых случаях getimagesize
воспринимает файлы как изображения, даже если они не являются таковыми.
И возвращает массив с бессмысленными значениями. Поэтому проверяю на
"адекватность" значения в массиве.
(
http://php.net/manual/ru/function.getimagesize.php) */
|| ( !list($width, $height, $type, $attr) = getimagesize($_FILES["image"]["tmp_name"]) )
|| ( !
preg_match("|^[\d]+$|", $width) )
|| ( !
preg_match("|^[\d]+$|", $height) )
|| ( !
preg_match("|^[0-9]{1,2}$|", $type) || $type < 1 || $type >18 ) ){

$err['img'] = 'Неизвестная ошибка при загрузке изображения.';
}
elseif( !in_array($mime, $allowed) ) {
$err['img'] = 'Вы можете загружать только изображения формата JPG и PNG.';
}
elseif($_FILES["image"]["size"] > $max_file_size) {
$err['img'] = 'Слишком большой файл. Максимально допустимый для загрузки размер изображения - 20 кб .';
}
elseif($width > $max_width ){
$err['img'] = 'Ширина изображения не должна превышать '.$max_width.' пикселей';
}
elseif ($height > $max_height) {
$err['img'] = 'Высота изображения не должна превышать '.$max_height.' пикселей';
}

if (!isset($err) ){

if ($mime === 'image/jpeg'){
$resource = imageCreateFromJPEG($_FILES['image']['tmp_name']) ;
}
elseif ($mime === 'image/png'){
$resource = imageCreateFromPNG($_FILES['image']['tmp_name']) ;
}

if (!$resource){
$err['img'] = 'Неизвестная ошибка при загрузке изображения.';
}
else{

$name = 'random_name.jpg';
$new_image = imageCreateTrueColor($width,$height);
imageCopy($new_image, $resource, 0, 0, 0, 0, $width, $height);
imageJPEG($new_image, $site_path.$save_path.$name, 100);
imageDestroy($new_image);

}

}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.