[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка типа загружаемого файла
Renden
Доброго врмени, возник вопрос, как все-же лучше всего проверить файл на то что он являеться изображением?
Я думаю самое простое это определение по расширению файла, как его тогда получить, от $file_name регуляркой отрезать 3 символа и проверять по массиву с расширениями?
Может есть другой какой вариант?
ПС. Готовые скрипты из инета тянуть как-то нехочеться, фиг знает что там намешано, хочеться самому понять и попробывать.



Спустя 6 минут, 25 секунд (24.11.2010 - 13:43) Nikitian написал(а):
Проверка на изображение


/**
* Если файл является картинкой, то возвращается указатель на неё, иначе - false
*
@param string $file Имя файла
*
@return resuorce
*
@author Nikitian
*/

function image_open($file) {
if (!file_exists($file)
)
return false;
if (class_exists('Imagick')) {//Если есть, то работаем imagick'ом, т.к. он больше файлов понимает
$image = new Imagick();
$ret = $image->readImage($file);
$image->clear();
$image->destroy();
if ($ret === false
)return false;
return $file;
}
# JPEG:
$im = @imagecreatefromjpeg($file);
if ($im !== false) {
return $im;
}
# GIF:
$im = @imagecreatefromgif($file);
if ($im !== false) {
return $im;
}
# PNG:
$im = @imagecreatefrompng($file);
if ($im !== false) {
return $im;
}
/*
# GD File:
$im=@imagecreatefromgd($file);
if($im!==false){return $im;}
# GD2 File:
$im=@imagecreatefromgd2($file);
if($im!==false){return $im;}
# WBMP:
$im=@imagecreatefromwbmp($file);
if($im!==false){return $im;}
# XBM:
$im=@imagecreatefromxbm($file);
if($im!==false){return $im;}
# XPM:
$im=@imagecreatefromxpm($file);
if($im!==false){return $im;}
# Попытка открыть со строки:
$im=@imagecreatefromstring(file_get_contents($file));
if($im!==false){return $im;}
*/

return false;
}

Передаёте расположение файла. Если вернуло false, то это не картинка, если что-то другое, то картинка

Спустя 3 минуты, 10 секунд (24.11.2010 - 13:47) Renden написал(а):
Спасибо, попробую, только вопрос: Imagick - я как понимаю это типа GD тоесть его тоже нужно ставить?)

Спустя 1 минута, 40 секунд (24.11.2010 - 13:48) ДиммКа написал(а):
получаем расширение так
preg_replace("/.*?\./", '', 'photo.jpg');

ну а дальше сравниваем полученно с массивом разрешенных расширений

Спустя 20 минут, 12 секунд (24.11.2010 - 14:08) Nikitian написал(а):
Цитата (Renden @ 24.11.2010 - 10:47)
Спасибо, попробую, только вопрос: Imagick - я как понимаю это типа GD тоесть его тоже нужно ставить?)

Да, это отдельное расширение, которое обычно не ставят. Функция на это рассчитана и работает и без мэджика, просто он больше форматов знает, поэтому приоритетнее им.

Спустя 4 часа, 4 минуты, 8 секунд (24.11.2010 - 18:13) PiratXXX написал(а):
ДиммКа

чет ты замудрил!

Для таких целей есть специальная функция: pathinfo() )))


$PathParts = pathinfo($FileName);

/* Возвращает массив */
echo $PathParts['dirname'], "\n";
echo $PathParts['basename'], "\n";
echo $PathParts['extension'], "\n";
echo $PathParts['filename'], "\n"; // версия PHP 5.2.0
Быстрый ответ:

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