Мне интересно, как должно работать скрытое поле MAX_UPLOAD_SIZE
?
<form action="" method="post" enctype="multipart/form-data"> <!-- in byes must preceed file field --> <input type="hidden" name="MAX_FILE_SIZE" value="2097152" /> <input type="file" name="upload" /> <input type="submit" name="submit" value="Submit" /> </form>
Я загрузил файл 4MB +, но у меня не было предупреждения со стороны клиента (я не говорю о стороне сервера). Что должно делать MAX_FILE_SIZE
?
ОБНОВИТЬ
ОК, так что для PHP наложить «мягкий» предел. Но есть ли разница между его использованием и проверкой чего-то вроде $_FILES['upload']['size'] < 2000
в коде?
MAX_FILE_SIZE
находится в КБ, а не в байтах. Вы были правы, это в байтах. Итак, для ограничения 4MB convert 4MB in bytes {1024 * (1024 * 4)}
попробуйте:
<input type="hidden" name="MAX_FILE_SIZE" value="4194304" />
Как объяснили другие, вы никогда не получите предупреждение для этого. Здесь просто наложить мягкий лимит на стороне сервера.
Чтобы ответить на ваш вопрос. Да, есть разница, вы НИКОГДА не доверяете пользователю. Если вы хотите всегда налагать ограничение, вы всегда должны проверять его размер. Не MAX_FILE_SIZE
, что делает MAX_FILE_SIZE
, потому что он может быть изменен пользователем. Итак, да, вы должны проверить, чтобы он всегда был до или выше того размера, который вы хотите.
Разница в том, что если вы наложили MAX_FILE_SIZE
из 2 МБ и пользователь попытается загрузить файл размером 4 МБ, как только они достигнут примерно первой загрузки 2 МБ, передача завершится, и PHP перестанет принимать больше данных для этого файла. Он сообщит об ошибке в массиве файлов.
Прежде чем начать, позвольте мне подчеркнуть, что размер файла должен быть проверен на стороне сервера . Если их не проверять на стороне сервера, злоумышленники могут переопределить ограничения на стороне клиента и загрузить огромные файлы на ваш сервер. НЕ ДОСТАТОЧНО ПОЛЬЗОВАТЕЛЕЙ.
Я немного поиграл с MAX_FILE_SIZE в PHP, он, похоже, работал только после того, как файл был загружен, что делает его неактуальным (опять же, злоумышленник может легко отменить его).
В приведенном ниже javascript-коде (проверенном в Firefox и Chrome), основанном на сообщении Мэтью , будет предупреждать пользователя (хорошего, невинного) априорно загрузить большой файл, сохраняя как трафик, так и время пользователя:
<form method="post" enctype="multipart/form-data" onsubmit="return checkSize(2097152)"> <input type="file" id="upload" /> <input type="submit" />
<script type="text/javascript"> function checkSize(max_img_size) { var input = document.getElementById("upload"); // check for browser support (may need to be modified) if(input.files && input.files.length == 1) { if (input.files[0].size > max_img_size) { alert("The file must be less than " + (max_img_size/1024/1024) + "MB"); return false; } } return true; } </script>
Для тех, кто удивлялся, что некоторые файлы легко загружаются, а некоторые нет, это может быть проблемой размера. Я делюсь этим, поскольку я застрял в том, что мой PHP-код не загружал большие файлы, и я продолжал считать, что он не загружает файлы Excel. Итак, если вы используете PHP и хотите увеличить лимит загрузки файлов, перейдите в файл php.ini и внесите следующие изменения:
upload_max_filesize = 2M
для изменения
upload_max_filesize = 10M
post_max_size = 10M
или необходимый размер. Затем перезапустите сервер Apache, и загрузка начнет волшебно работать. Надеюсь, это поможет кому-то.
На самом деле это не работает. Вы можете найти объяснение в одном из комментариев на странице руководства: http://www.php.net/manual/en/features.file-upload.php#74692
Ответ на обновленный вопрос: очевидная разница в том, что проверки на стороне сервера надежны, проверки на стороне клиента – нет.
Он должен только отправлять информацию на сервер. Причина, по которой он должен предшествовать файловому полю, заключается в том, что он должен прибыть до загрузки файла в запросе, чтобы сервер мог использовать его для проверки размера загрузки.
Как значение используется на сервере, зависит от того, что вы используете, чтобы заботиться о загрузке. Предполагается, что этот код предназначен для определенного компонента загрузки, который специально ищет это значение.
Похоже, что встроенная поддержка загрузки в PHP – это одно значение для использования этого значения поля.
Там IS POINT при введении поля скрытой формы на стороне клиента MAX_FILE_SIZE.
php.ini может ограничить размер загруженного файла. Таким образом, несмотря на то, что ваш скрипт соблюдает ограничение, наложенное php.ini, различные формы HTML могут дополнительно ограничить размер загруженного файла. Таким образом, при загрузке видео форма может ограничивать * максимальный размер до 10 МБ, а при загрузке фотографий формы могут устанавливать ограничение в 1 Мб. И в то же время максимальный предел может быть установлен в php.ini, чтобы предположить, что 10mb позволит все это.
Хотя это не является глупым доказательством того, что сервер говорит, что делать, но это может быть полезно.
Надеюсь, это помогло кому-то.
Объяснение PHP.net о скрытом поле MAX_FILE_SIZE.
Скрытое поле MAX_FILE_SIZE (измеренное в байтах) должно предшествовать поле ввода файла, а его значение – максимальный размер файла, принятый PHP. Этот элемент формы всегда должен использоваться, поскольку он избавляет пользователей от необходимости ждать передачи большого файла только для того, чтобы обнаружить, что он слишком велик, и передача не удалась. Имейте в виду: обмануть этот параметр на стороне браузера довольно просто, поэтому никогда не полагайтесь на файлы с большим размером, которые блокируются этой функцией. Это просто удобная функция для пользователей на клиентской стороне приложения. Однако настройки PHP (на стороне сервера) для максимального размера не могут быть обмануты.
http://php.net/manual/en/features.file-upload.post-method.php