Использую ограничение на размер загружаемого файла с помощью директив файла .htaccess:
php_value upload_max_filesize 2M
php_value post_max_size 2M
А также с помощью скрытого поля формы MAX_FILE_SIZE:
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">
Необходимо распознать ситуацию, когда загружается слишком большой файл, обработать её, и вывести пользователю соответствующее сообщение.
Если срабатывает ограничение upload_max_filesize, об этом можно узнать из массива $_FILES, его элемент 'error' будет содержать код ошибки UPLOAD_ERR_INI_SIZE. При превышении значения MAX_FILE_SIZE, код ошибки - UPLOAD_ERR_FORM_SIZE.
В случае же срабатывания ограничения post_max_size (максимальный размер данных для передачи методом POST), всё несколько сложнее: массив $_FILES будет пустым, никаких кодов ошибок нет.
Можно воспользоваться этим, заключив, что если массив $_FILES пуст, значит было превышено значение post_max_size (в случае отсутствия файла, $_FILES не будет пустым). Суммируя, получаем такое условие:
<?php
if ((count($_FILES) == 0) ||
($_FILES['userfile']['error'] == UPLOAD_ERR_INI_SIZE) ||
($_FILES['userfile']['error'] == UPLOAD_ERR_FORM_SIZE))
exit('Your file is too large.');
?>
Собственно вопрос: правильно ли составлено условие? Можно ли полагаться на то, что массив $_FILES пуст, или есть более правильный способ?