Как остановить загрузку файла большего размера во время загрузки? - PullRequest
7 голосов
/ 28 января 2012

Я использую apache, PHP.

Итак, для php, даже если я установил максимальный размер файла, если кто-то загрузит огромный файл, он загрузит все это на сервер, а затем PHP вернет ошибку. это правильно?

Я бы хотел, чтобы веб-сервер или PHP останавливались, когда размер файла или размер запроса превышает определенный размер.

есть ли способ сделать это? Я помню что-то вроде установки post_max_size или установки чего-то в apache.conf, но не уверен, остановится ли он, когда файл превысит максимальный предел.

  • Я не доверяю проверке на стороне клиента. Итак, я ищу решение Apache или PHP уровня. :)

Ответы [ 7 ]

4 голосов
/ 28 января 2012

LimitRequestBody Apache , afaik, он просто останавливает соединение при переходе ....

2 голосов
/ 28 января 2012

max_execution_time и max_input_time Эти параметры определяют максимальное время жизни скрипта и время, которое скрипт должен потратить на принятие ввода. Если передается несколько мегабайт данных, max_input_time должно быть достаточно высоким. Вы можете переопределить настройку в INI-файле для max_input_time, вызвав функцию set_time_limit () в ваших скриптах

Это взято из http://www.radinks.com/upload/config.php

Если вы установите более низкие значения для этих записей ini, сценарий должен прерваться до завершения загрузки

2 голосов
/ 28 января 2012

Невозможно остановить это со стороны сервера - файл все равно будет загружен, прежде чем PHP решит, отклонить ли его. Вам нужно добавить это обнаружение на стороне клиента. Хотя вы не можете сделать это с помощью обычной HTML-формы, загрузчики флэш-памяти могут определить размер файла до начала загрузки.

На стороне сервера вы ничего не можете сделать с PHP - файлы всегда были полностью загружены, прежде чем у PHP появится возможность сказать «нет». Чтобы заблокировать загрузку (то есть отключить клиентскую часть через POST), вам понадобится немного волшебства веб-сервера вниз по стеку. Perlbal способен сделать это. Написание собственного модуля Apache - это решение (грубой силы). Использование любого облегченного прокси-сервера перед вашим основным веб-сервером - это решение, если вы беспокоитесь о больших загрузках, связывающих ресурсы веб-сервера.

Это действительно зависит , почему вы хотите ограничить большие загрузки. Чтобы сэкономить время пользователей, просто добавьте сообщения, в которых указан максимальный размер файла. Если это ресурсы сервера, используйте облегченный прокси перед сервером. Если это что-то еще, ну, что это?

1 голос
/ 28 января 2012

Используйте скрытое поле с именем MAX_FILE_SIZE, значение которого указывает максимальный размер файла в байтах. См. Пример # 1 на этой странице для получения дополнительной информации.

<!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
    <!-- MAX_FILE_SIZE must precede the file input field -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- Name of input element determines name in $_FILES array -->
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>
0 голосов
/ 07 июня 2015

Используйте таймер (тайм-аут) для каждой загрузки с функцией прогресса сеанса в PHP 5.5 и измерьте среднее время на размер загрузки.

0 голосов
/ 28 января 2012

Используйте $ _FILES в php.

if($_FILES['name']['size'] > $limit){
// continue;
}
0 голосов
/ 28 января 2012

Вот простое решение jquery Как проверить размер входного файла с помощью jQuery? Но проверку на стороне клиента можно легко взломать.

...