Может ли время загрузки файлов истекать в PHP?
Привет, я совсем новичок в PHP, я создал форму для очень больших csv-файлов, которые будут загружены на мой сервер. Кто-то упомянул мне, что браузер может отключиться из-за того, что загружаемый файл слишком велик, это правда? и если да, то можно ли это предотвратить?
Спасибо за вашу помощь!
10 answers
Вам нужно правильное значение для следующих настроек php.ini:
- максимальное время ввода ( не max_execution_time!)
- upload_max_filesize размер файла
- пост_макс_размер
И, возможно,
Существуют некоторые директивы конфигурации, которые могут привести к сбою больших загрузок, если их значения слишком малы:
PHP
-
max_input_time
Максимальное время в секундах, в течение которого скрипту разрешается анализировать входные данные, такие как отправка, получение и загрузка файлов -
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:
Пост_макс_размер
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 МБ не будет загружен.