Привет им совершенно новый для PHP, я создал форму для очень больших CSV-файлов, которые будут загружены на мой сервер. Кто-то сказал мне, что браузер может отключиться из-за большого загружаемого файла, правда? и если да, то можно ли это предотвратить?
Спасибо за вашу помощь!
Для следующих параметров php.ini вам нужно правильное значение:
и возможно
Существуют некоторые директивы конфигурации, которые могут привести к сбою больших загрузок, если их значения слишком малы:
PHP
max_input_time
Максимальное время в секундах, когда скрипту разрешено анализировать входные данные, такие как POST, GET и загрузка файлов upload_max_filesize
Максимальный размер загруженного файла. post_max_size
Максимальный размер разрешенных почтовых данных. апаш
TimeOut
Количество времени, в течение которого сервер будет ожидать определенных событий перед сбоем запроса LimitRequestBody
Ограничивает общий размер тела запроса HTTP, отправленного с клиента Вероятно, есть нечто большее.
Хороший способ обойти плохое управление большими файловыми загрузками в php – использовать загрузчик, такой как JUpload, который разбивает файл на куски перед отправкой. Это также имеет преимущество для ваших пользователей, что они получают правильную обратную связь при загрузке при загрузке, и они могут загружать несколько файлов за один раз.
При загрузке очень больших файлов вам необходимо изменить 4 переменных конфигурации:
upload_max_filesize
post_max_size
memory_limit
time_limit
Ограничение времени может быть увеличено во время выполнения с помощью set_time_limit ().
Скрипт может запускаться по умолчанию примерно на 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-скриптом, балансировщик нагрузки может отключать или блокировать большие загрузки. Всегда проверяйте конфигурацию балансировки нагрузки, если вы поддерживаете загрузку файлов. Так же, как и PHP, большинство настроек балансировки нагрузки для загрузок довольно малы.
Я смог решить эту проблему, используя следующие настройки, вы можете использовать разные значения, но вы получаете идею:
Для моего сервера я помещаю эти строки в файл «.user.ini» внутри каталога сценария, ваш сервер может искать другой файл, если вы используете 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 МБ не будет загружен.