аватар Автор: Сергей Касаткин | 25 февраля 2013 17:39

Статьи / PHP /

Скрипт загрузки изображения на сайт PHP


Возможно, Вы уже сталкивались на своём сайте с проблемой загрузки изображения на сайт? Допустим, пользователю нужно загрузить аватарку или изображение к какой-либо записи или статье? И как обезопасить себя от загрузки на сервер вредоносного кода JS вместо изображения?

В страницу с формой Загрузки нужно вставить форму:

Код HTML

Размер изображения не превышает 512 Кб, пиксели по ширине не более 500, по высоте не более 1500. 
<form name="upload" action="download_img.php" method="POST" ENCTYPE="multipart/form-data"> 
Выберите файл для загрузки: 
<input type="file" name="userfile">
<input type="submit" name="upload" value="Загрузить"> 
</form>


Обычная форма загрузки изображения. При нажатии на Загрузить мы перейден на страницу download_img.php.

Форма будет ссылать на файл download_img.php. В нём для того, чтобы обезопасить сервер от загрузки посторонних файлов вместо изображений достаточно указать проверку размера файла. В случае возврата FALSEв ответ на размер изображения, файл загружен НЕ будет.

Код PHP

<?php
$uploaddir = 'images/';
// это папка, в которую будет загружаться картинка
$apend=date('YmdHis').rand(100,1000).'.jpg'; 
// это имя, которое будет присвоенно изображению 
$uploadfile = "$uploaddir$apend"; 
//в переменную $uploadfile будет входить папка и имя изображения

// В данной строке самое важное - проверяем загружается ли изображение (а может вредоносный код?)
// И проходит ли изображение по весу. В нашем случае до 512 Кб
if(($_FILES['userfile']['type'] == 'image/gif' || $_FILES['userfile']['type'] == 'image/jpeg' || $_FILES['userfile']['type'] == 'image/png') && ($_FILES['userfile']['size'] != 0 and $_FILES['userfile']['size']<=512000)) 
// Указываем максимальный вес загружаемого файла. Сейчас до 512 Кб 
  if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) 
   { 
   //Здесь идет процесс загрузки изображения 
   $size = getimagesize($uploadfile); 
   // с помощью этой функции мы можем получить размер пикселей изображения 
     if ($size[0] < 501 && $size[1]<1501) 
     { 
     // если размер изображения не более 500 пикселей по ширине и не более 1500 по  высоте 
     echo "Файл загружен. Путь к файлу: <b>http:/yoursite.ru/".$uploadfile."</b>"; 
     } else {
     echo "Загружаемое изображение превышает допустимые нормы (ширина не более - 500; высота не более 1500)"; 
     unlink($uploadfile); 
     // удаление файла 
     } 
   } else {
   echo "Файл не загружен, вернитеcь и попробуйте еще раз";
   } 
} else { 
echo "Размер файла не должен превышать 512Кб";
?>

Для проверки на то, действительно загружается изображение или вредоносный код, используется встроенная в php функция getimagesize.

getimagesize($image);

Идёт проверка и на тип файла (изображение) и на его размер. Не определится, если это не изображение.


Возможно, код и не самый короткий, но поставленные задачи выполняет.
Спасибо за внимание!
 



Похожие статьи


Комментарии к статье (vk.com)