Добро пожаловать, Гость!
Безопасная загрузка изображений - Полезный php код №68
Все категории

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

Описание: В корне сервера создайте файл /uploadImage.php В данном коде всё описано. Так что даже поймет слепой. Один минус это загрузка изображения с прозрачным фоном, Но плюсы есть: Во время загрузки идет полная проверка файла. 1. Сначала файл проверяется на размер(px и байты),формат. 2. Если прошел успешную обработку заливается на сервер 3. Уже изображения хранящиеся на сервере обрабатывает и создает новое в формате .jpg Если кто захочет залить shell к вам на сайт через изображения то у него этого не получится. Так как когда создается новое изображение идет полное изменение элементов в коде изображения. Сверху в скрипте имеется БД, её необходимо подключить для записи и вывода загруженных картинок.
Код:

<?php
ob_start
(); 
error_reporting('0'); 
session_start(); 
// тут нужно прописать БД  
$host "localhost"# Хост 
$user ""# Пользователь 
$table ""# Таблица 
$password ""# Пароль 
$connect = @mysql_pconnect($host$user$password)or die ('Проверьте данные!'); 
@
mysql_select_db($table) or die ('Проверьте таблицу'); 
@
mysql_query("SET NAMES 'utf8'"$connect); 
function 
logi($log){$_SESSION['log'] = $log;} // функция записи в лог 
function logs(){return $_SESSION['log'];} // функция чтения логов 
function logn(){$log $_SESSION['log'];if(isset($log)){return $_SESSION['log'] = null;}} // функция очистки логов 
$year date('Y'); 
$mount date('m'); 
$fileHeight '500'// высота загружаемого изображения  (максимальная) 
$fileWidth '500'// ширина загружаемого изображения (максимальная) 
$sizeImageFile '100000'// размер в байтах 
$maxSize round($sizeImageFile/1000)." кб"// максимальный размер для загрузки (для уведомления) 
$nameImage = (md5(time())).".jpg"// имя которое примет изображения после загрузки, это текущие время в секундах + в md5 
$urlEnd "/uploadImage.php"// ссылка куда перенаправлять после загрузки изображения 
$saveImage0 "/instalsсript/image";   // на конце слеша / не надо, только в начале 
$saveImageIs $_SERVER['DOCUMENT_ROOT']."/instalsсript"// первая папка для загрузки изображения 
$saveImageImg $_SERVER['DOCUMENT_ROOT']."/instalsсript/image"// вторая папка 
$saveImage1 $_SERVER['DOCUMENT_ROOT'].$saveImage0."/".$year.""// это уже для загрузки папка года 
$saveImage2 $_SERVER['DOCUMENT_ROOT'].$saveImage0."/".$year."/".$mount.""// тоже для загрузки папка месяца 
if(isset($_GET['form-check'])){ 
// ниже 4 строчки это проверка на существование папок, если нету папки то mkdir() создает новую 
if(file_exists($saveImageIs) == null){mkdir($saveImageIs);} // создание папки instalsсript 
if(file_exists($saveImageImg) == null){mkdir($saveImageImg);} // image 
if(file_exists($saveImage1) == null){mkdir($saveImage1);} // создание папки года 
if(file_exists($saveImage2) == null){mkdir($saveImage2);} // создание папки месяца в текущем годе 
$upload $_SERVER['DOCUMENT_ROOT'].$saveImage0."/".$_FILES['image']['name'].""// путь где хранится временно загруженный файл 
$size getimagesize($upload); // получаем данные о файле (размер в px,размер в байтах...) 
// Проверка файла 
if($_FILES['image']['size'] > $sizeImageFile){logi("<font color = 'red'>Размер изображения превышает ".$maxSize."</font>");} 
elseif(
$_FILES['image']['size'] == '0'){logi("<font color = 'red'>Изображение не загружена, причины: </br>1.Возможно вы не выбрали изображение!</br>2.Возможно вы выбрали файл не являющимся изображением!</font>");} 
elseif(
$_FILES['image']['type'] != 'image/gif' && $_FILES['image']['type'] != 'image/jpeg' && $_FILES['image']['type'] != 'image/png'){logi("<font color = 'red'>Загрузка изображения не возможна, так как формат не является не одним из форматов:gif,jpeg,png</font>");} 
elseif(
$size['0'] > $fileWidth && $size['1'] > $fileHeight){ 
// Проверка на высоту и ширину 
logi("<font color = 'red'>Загружаемое изображение превышает допустимые нормы</br> (ширина не более - ".$fileHeight."px высота не более ".$fileWidth."px)</font>"); 

elseif(
move_uploaded_file($_FILES['image']['tmp_name'],$upload)){ 
$uploadImageTrue true// переменная, обозначает что изображение прошло успешно и готова к загрузке 
if(isset($_FILES['image']) && $uploadImageTrue == true){ 
$image getimagesize($upload); // получаем данные
?>


Добавил: Izg-20 (19 Сент 2015)

Скачать: TEXTAREA
DCMS-Social.ru - движок социальной сети, вап и веб мастерская, файло-обменник и форум.
Статистика DCMS-Social.ru: Пользователей - 14971, тем на форуме - 30292, сообщений - 298888