@rdt09

Как определить, что через форму был загружен слишком большой файл?

Использую ограничение на размер загружаемого файла с помощью директив файла .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 пуст, или есть более правильный способ?
  • Вопрос задан
  • 522 просмотра
Пригласить эксперта
Ответы на вопрос 3
archakov06
@archakov06
Frontend-разработчик (ReactJS)
зачем такое громоздкое условие. У загружаемого файла есть параметры который показывает размер файла в байтах. Просто определи макс. значение и выводи ошибку.
Ответ написан
dmitrydeco
@dmitrydeco
<form action="" method="get" accept-charset="utf-8">
<input type="file" name="file" value="" id="file">
<p><input type="submit" value="Continue"></p>
</form>


var filesize = document.forms[0].file.files[0].fileSize;


И перед отправкой проверяете размер.
Ответ написан
Комментировать
VladimirAndreev
@VladimirAndreev
php web dev
поставь в форму флаг того, что файл загружали. и, если на стороне сервера $_FILES пуст - то выводи сообщение об ошибке.
если файл отсекается по размеру - $_FILES будет пуст и никакого флага ошибки не будет...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы