Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проверка файла на MIME тип! нелп!
Форумы портала PHP.SU » PHP » Программирование на PHP » Проверка файла на MIME тип! нелп!

Страниц (1): [1]
 

1. politaev - 12 Января, 2010 - 00:53:28 - перейти к сообщению
ВСЕМ ПРИВЕТ!

Вот такой вопросик:

При загрузке файла на сервер нужно проверить тип файла....
сам проверяю так:

if($_FILES['uploadfile']['type']!='application/x-rar-compressed'){echo "ERROR...Можно загружать только .rar ";}
Так вот проблема! application/x-rar-compressed - говорят не каждый браузер может это считать с файла, это так?
А Можно проверку файла на тип сделать вот так: сравнить концовку ,например, ".rar", если можно то как это сделать? Может кто что лучше посоветует..... Ниндзя
2. Ch_chov - 12 Января, 2010 - 05:21:13 - перейти к сообщению
politaev пишет:
говорят не каждый браузер может это считать с файла, это так?

Это не трудно проверить. Основных браузеров не так уж и много.


politaev пишет:
сравнить концовку ,например, ".rar", если можно то как это сделать?

3. Мелкий - 12 Января, 2010 - 12:31:16 - перейти к сообщению
politaev пишет:
А Можно проверку файла на тип сделать вот так: сравнить концовку ,например, ".rar", если можно то как это сделать? Может кто что лучше посоветует.....

Можно, но это проверка на расширение. Т.е. можно будет закачивать любой файл, только лишь изменив ему имя.

Определите mime явно на сервере, чтобы не зависить от браузера:
4. valenok - 12 Января, 2010 - 14:20:33 - перейти к сообщению
а. Браузер тут не причем. Вы наверняка слышали о том, что PHP исполняется на сервере.
б. Проверять тип файла по расширению нельзя.
5. Мелкий - 12 Января, 2010 - 14:32:44 - перейти к сообщению
valenok пишет:
а. Браузер тут не причем. Вы наверняка слышали о том, что PHP исполняется на сервере.

http://php.su/phphttp/?uploads
Цитата:
$_FILES['uploadfile']['type'] - MIME-тип принятого файла (если браузер смог его определить), например: image/gif, image/png, image/jpeg, text/html;
6. Ch_chov - 12 Января, 2010 - 15:43:07 - перейти к сообщению
valenok пишет:
Браузер тут не причем. Вы наверняка слышали о том, что PHP исполняется на сервере.

При загрузке файлов браузер отправляет заголовок Content-Type: тип файла (который можно легко подделать).
Этот тип как раз и находится в $_FILES['uploadfile']['type']


valenok пишет:
Проверять тип файла по расширению нельзя

Почему нельзя? Если расширение файла не входит в список запрещённых.
Даже если внутри этого файла находится исполняемый код, чтобы его запустить, пользователь должен иметь возможность менять конфигурацию сервера.
Каким образом проверять файлы, которые не имеют mime тип ?
mime_content_type доступна не на каждом сервере.


Статья по теме.



Значение $_FILES['uploadfile']['type'] при загрузке rar архива

CODE (text):
скопировать код в буфер обмена
  1. Opera 10         string[28] "application/x-rar-compressed"
  2. IE 8             string[24] "application/octet-stream"
  3. Google Chrome 3  string[0]  ""
  4. Firefox 3.5      string[28] "application/x-rar-compressed"
7. JustUserR - 12 Января, 2010 - 21:41:13 - перейти к сообщению
valenok пишет:
Браузер тут не причем
А разве не он отсылвает Content-type в POST-запросе при загрузке файла? Другое дело что MIME можно посмотреть с помощью magic_mime то есть по двоичным кодам в самом файле (Такие таблицы соответствий использует Apache)
8. CenapaTop - 12 Января, 2010 - 22:15:31 - перейти к сообщению
А так нельзя ?
PHP:
скопировать код в буфер обмена
  1. if (rar_open ("file.rar")) echo 'rar';
  2. else echo 'не rar';
9. JustUserR - 13 Января, 2010 - 12:09:52 - перейти к сообщению
CenapaTop пишет:
rar_open ("file.rar"))
Это слишком сильно зависит от сервера и модулей - у меня такой командды например нет - другие дело вызввать архиватор и сммотреть может ли он разархивировать данный файл - но опять-таки под Linux с RARом тяжко - и если даже какой-то сервис хранит RAR-файлы то не факт что он сам ими пользуется - а просто отдает на скачку
10. Ch_chov - 14 Января, 2010 - 07:29:18 - перейти к сообщению
Цитата:
Это слишком сильно зависит от сервера и модулей - у меня такой командды например нет
Можно задействовать какой нибудь специальный php класс для работы с RAR архивами.

Например: http://www[dot]htmlweb[dot]ru/php/functi[dot][dot][dot]n/RarArchive.php
11. JustUserR - 14 Января, 2010 - 12:27:16 - перейти к сообщению
Ch_chov пишет:
Можно задействовать какой нибудь специальный php класс для работы с RAR архивами.
В принципе я соглаен что идея проверить является ли данный файл архивом путем его попытки разархивирования на сервере очень даже неплоха и скорее всего очень удобна

 

Powered by ExBB FM 1.0 RC1