Добро пожаловать, Гость!
Безопасная загрузка изображений - Полезный 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); // получаем данные
?>
<?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)
Просмотров: (53)
Комментарии (1)
Скачать: TEXTAREA
DCMS-Social.ru - движок социальной сети, вап и веб мастерская, файло-обменник и форум.
Статистика DCMS-Social.ru: Пользователей - 14971, тем на форуме - 30292, сообщений - 298888