Типы файлов

Мутник

Новичок
Типы файлов

Хочу дать пользователю закачивать на сервер только

PHP:
*.jpg
*.jpeg
*.tif
*.tiff
*.zip
*.rar
Можно ли как то проверить файл на валидность данному формату, кроме как используя расширение?

пробовал функцией mime_content_type(), так она на двух разных серверах выдает разные типы для некоторых документов (в частности для *.rar выдала text/plain). Можно, конечтно, поверить данным, которые выдает массив $_FILES, но с ним есть приколы, в частности для jpg.

существует image/jpeg && image/pjpeg.

есть ли какое то универсальное решение? или надо все возможные варианты ручками рассматривать?

P.S. идея была сделать

PHP:
$allowed=array('image/jpeg', 'image/pjpeg','image/gif', 'image/tiff', 'application/octet-stream', 'application/x-zip-compressed');
НО будет ли это правильно?

P.P.S. только не надо тут флейма и "умных" мыслей.
 

Tor

Новичок
ты сначала ответь на вопрос, что такое jpg или rar файл?
чем, хотя бы эти два, между собой отличаются?
 

Tor

Новичок
ну тогда определяй формат файла, если умный такой
 

Begemot

Guest
только я не понял, что среди рисунков делает RAR?
// $file - загружаемый файл
$type=basename($file_type);

switch ($type) {
case "gif": ***
break;
case "jpeg":
***
break;
case "pjpeg":
***
break;
и т д
default:
***
break;
}
 

kvf77

Red Devil
Для графики и flash можно воспользоваться функцией GetImageType которая смотрит именно на сам файл и выводит его тип.
 

SiMM

Новичок
> Для графики и flash можно воспользоваться функцией GetImageType которая смотрит именно на сам файл и выводит его тип.
Запарили...
PHP:
GIF<?print_r(getimagesize(__FILE__))?>
Нет особого смысла проверять что-то ещё, кроме расширения. По крайней мере, оно того не стоит.
 

Мутник

Новичок
SiMM


дело в том, что если бы не стоило, я бы не проверял. для меня стОит.

С расширением сделал, но ...

Ладно, всем спасибо.
 

tolst

Новичок
Может быть стоит в зависимости от расширения пробывать совершить какие либо действия с файлом предназначенные именно для этого файла, например для архива - распокавать его, для картинки сделать что нибудь с GD... если возвращается TRUE - клиент не подменил расширение, файл действительно таков...
Хотя это каряво с эстетической точки зрения :)
 

neko

tеam neko
да нет, для нормальной проверки картинок вообще-то есть gd
суть в том, что для getimagesize() как раз gd не требуется
но как нам сейчас показали, она ничего и не проверяет
 

SiMM

Новичок
> да нет, для нормальной проверки картинок вообще-то есть gd
Интересно, каким образом? Или речь об [m]exif[/m]?
PHP:
GIF<?var_dump(exif_imagetype(__FILE__)==IMAGETYPE_GIF)?>
> дело в том, что если бы не стоило, я бы не проверял. для меня стОит.
Ты никогда не сможешь отличить картинку от картинки с внедрённым кодом :) В некоторых случаях - даже визуально :) Смирись с этим :) То же самое можно и с архивами сделать. В простейшем случае - создать архив из одного файла без сжатия. Архиватор его сочтёт за валидный архив (а он таковым и является) - но подставь нужное расширение - и он выполнит свой код :)
 

neko

tеam neko
нет речь о функциях которые создают gd картинки из файлов
exif насколько я знаю к gd вообще никак не относится, другой экстеншен
 

tolst

Новичок
чем вас не устроил мой вариант?
можно и GD поюзать...
а для архивов можно на никсовой платформе тестить архив... через exec
 

3BEP

Новичок
А почитать первые байты?
rar: первые 4 байта - 52 61 72 21 - удачно складываются в слово Rar!
zip: первые 4 байта - 50 48 03 04
tif и tiff - одинаковые начальные байты, первые три: 49 49 2А
про jpg и jpeg не уверен, но вроде так: FF D8 FF E0 00 10 4A 46 49 46

только, как уже было сказано, это не защитит от внедренного кода
 

SiMM

Новичок
> а зачем это делать?
Самое главное-то спросить забыли :)
 
Сверху