Ответ 1
Вам нужно правильное значение для следующих настроек php.ini:
- max_input_time ( не max_execution_time!)
- upload_max_filesize
- post_max_size
и, возможно,
Привет, совершенно новый для PHP, я создал форму для очень больших файлов csv, которые будут загружены на мой сервер. Кто-то сказал мне, что браузер может отключиться из-за большого загружаемого файла, правда? и если да, то можно ли это предотвратить?
Спасибо за вашу помощь!
Вам нужно правильное значение для следующих настроек php.ini:
и, возможно,
Существуют некоторые директивы конфигурации, которые могут привести к сбоям больших загрузок, если их значения слишком малы:
PHP
max_input_time
Максимальное время в секундах script позволяет анализировать входные данные, такие как POST, GET и загрузка файловupload_max_filesize
Максимальный размер загруженного файла.post_max_size
Максимальный размер разрешенных сообщений.Apache
TimeOut
Количество времени, в течение которого сервер будет ждать определенных событий перед сбоем запросаLimitRequestBody
Ограничивает общий размер тела запроса HTTP, отправленного с клиентаВероятно, есть что-то большее.
Хороший способ обойти плохую обработку больших файловых загрузок в php - использовать загрузчик, такой как JUpload, который перед отправкой разбивает файл на куски. Это также имеет то преимущество для ваших пользователей, что они получают правильную обратную связь при загрузке и могут загружать несколько файлов за один раз.
При загрузке очень больших файлов вам необходимо изменить 4 переменных конфигурации:
upload_max_filesize
post_max_size
memory_limit
time_limit
Ограничение времени может быть увеличено во время выполнения с помощью set_time_limit().
A script разрешено запускать по умолчанию примерно на 30 секунд. Вы можете использовать функцию set_time_limit(), чтобы изменить это. Кроме того, если вашему пользователю нужно будет загружать большие файлы, вам нужно будет изменить значения post_max_size и/или upload_max_filesize в файле php.ini.
Кроме того, если вы хотите просто расширить свой тайм-аут в глобальном масштабе, вы можете изменить максимальное время выполнения в php.ini.
Да, это правда. Загрузка файла осуществляется через запрос POST, и запросы в целом подлежат таймауту. Вы должны иметь возможность перенастроить среду для более длительного таймаута запроса.
Это не просто таймауты, которые могут вызвать проблемы. Существуют ограничения на максимальный размер файла, который можно загрузить. Эти ограничения могут быть изменены в файле php.ini:
post_max_size
upload_max_filesize memory_limit
Подробнее о http://uk.php.net/ini.core.
Мой ответ напрямую не связан с вашим исходным вопросом, но если у вас есть обратный балансировщик прокси-сервера перед вашим PHP script, балансировщик нагрузки может отключить или заблокировать большие загрузки. Всегда проверяйте конфигурацию балансировки нагрузки, если вы поддерживаете загрузку файлов. Точно так же, как PHP, большинство настроек балансировки нагрузки для загрузок довольно малы.
Я смог решить эту проблему, используя следующие настройки, вы можете использовать разные значения, но вы получаете идею:
Для моего сервера я помещаю эти строки в файл ".user.ini" внутри каталога script, ваш сервер может искать другой файл, если вы используете phpinfo ('user_ini.filename') на сервер, он выплюнет файл, который вам нужно поместить в
max_execution_time = 1800
max_input_time = -1
post_max_size = 100M
upload_max_filesize = 100M
memory_limit = 256M
Если изменение любого из приведенных выше параметров не имеет никакого значения, может быть, что html-форма где-то содержит имя MAX_FILE_SIZE как скрытое поле.
<input type="hidden" name="MAX_FILE_SIZE" value="10000000">
В приведенном выше примере любой файл более 10 МБ не будет загружен.
Это как раз решение вашей проблемы, Sserver перерыв в ожидании HTTP-запроса от клиента. Это означает, что вы отправляете запрос с https://на https://, и браузер сообщает, что ожидает http-запрос, поэтому вы должны отправить запрос с https://на http://. В любом случае это решение работает.
Да, если вы попытаетесь загрузить большой файл на сервер. Ваш файл не может быть загружен, потому что ваше время выполнения ограничено. поэтому вам необходимо настроить файл php.ini.
примечание: - изменить по вашему выбору upload_max_filesize: post_max_size
это поможет