isset и! empty не проходят проверку на загруженные файлы - PullRequest
6 голосов
/ 31 марта 2010

У меня есть форма загрузки с файлом для загрузки. У меня проблема в том, что даже когда ни один файл не загружен, if (isset ($ _ FILES)) ИЛИ if (! Empty ($ _ FILES)) по-прежнему проходит успешно:

$_FILES = $HTTP_POST_FILES;
if($_POST['type'] == 'photo' && isset($_FILES)){
// returns true even if no file is uploaded. What am I missing!
}

1 Ответ

11 голосов
/ 31 марта 2010

Будучи суперглобальным, $_FILES предположительно всегда устанавливается независимо от того, существует загруженный файл или нет.

Проверьте загрузку файлов, которые вы ожидаете, и посмотрите на поле размера. (Очевидно, в соответствии с примечаниями, внесенными пользователем в руководстве, если форма содержит элемент выгрузки, вполне возможно, что даже isset($_FILES["my_file_name"]) вернет true, даже если файл не был выбран.

Это должно работать надежно:

if($_POST['type'] == 'photo' && 
   ((isset($_FILES["my_file_name"]["size"]) && 
    ($_FILES["my_file_name"]["size"] > 0)) ){

(isset () предназначен для предотвращения уведомления о «неопределенном индексе».)

Кстати, для чего ты это делаешь?

$_FILES = $HTTP_POST_FILES;
...