Вопрос по php – На загрузку PHP-файла влияет max_input_time?

30

Я смотрю на то, что является лучшим значением для значений по умолчанию в PHP. Я видел много противоречивыхmax_input_time.

Этот ответ говорит, что он считает, что загрузка файлов не засчитывается в таймеры: https://stackoverflow.com/a/3758522/518169

В официальной документации PHP есть большое красное предупреждение:

max_input_time sets the maximum time, in seconds, the script is allowed to receive input; this includes file uploads. For large or multiple files, or users on slower connections, the default of 60 seconds may be exceeded

Источник:http://php.net/manual/en/features.file-upload.common-pitfalls.php, последнее обновление: пт, 06 июл 2012

Так что из этого кажетсяmax_input_time does affect загрузка файлов и чтобы быть уверенным, что посетители могут загружать файлы размером 20 МБ даже из медленных или мобильных соединений, значение по умолчанию 60 определенно недостаточно!

Что вы рекомендуете установить это значение? 300?

Кроме того, есть ли связь междуmax_execution_time а такжеmax_input_time? Например, вот такmax_execution_time должен быть больше чемmax_input_time?

Достаточно интересно, что у меня в течение некоторого времени одни и те же проблемы с одним из моих хостинг-провайдеров, и хотя все в конфигурации PHP кажется допустимым, большие загрузки при медленных соединениях приводят кHTTP/1.1 500 Internal Server Error, Теперь, когда я увидел эту цитату в первом ответе, я начинаю задумываться о том, какова реальная сделка. Буду внимательно следить за этой веткой и постараюсь самому что-нибудь выкопать. brezanac
У меня были некоторые проблемы с загрузкой больших файлов и временем ожидания Apache, но с PHP нет. Gabriel Santos

Ваш Ответ

4   ответа
7

Я много изучалmax_input_time, Время передачи по сети не имеет значения. PHP как обработчик Apache (mod_php) или пара Nginx / PHP-FPM дала аналогичные результаты: PHP получает загруженный файл после завершения передачи и веб-сервер передает данные. На моих тестах 2 секундыmax_input_time было достаточно, чтобы справиться с загрузкой 800 МБ.

Все детали наhttp://blog.hqcodeshop.fi/archives/185-PHP-large-file-uploads.html

2

Начиная с PHP 5.4, загрузка файлов PHP может определенно зависеть от max_input_time. Недавно я получил 500 ошибок в файлах, загрузка которых заняла более 60 секунд. Я изменил это единственное значение в моем php.ini, и оно ушло.

Кроме того, формулировка в руководстве теперь отличается от того, что указано в принятом ответе. Теперь говорится:

This sets the maximum time in seconds a script is allowed to parse input data, like POST and GET. Timing begins at the moment PHP is invoked at the server and ends when execution begins.

Я использовал PHP 5.4.16 NTS и IIS 7.5. По-видимому, PHP вызывается до загрузки файла.

Одна интересная вещь, которую стоит отметить, - мои журналы ошибок PHP давали неправильную ошибку. Они заявили, что «PHP Fatal error: максимальное время выполнения 10000 секунд превышено в ...». Не имеет значения, на что я установил max_execution_time, это выдает ту же ошибку с новым номером.

21

После некоторого быстрого бенчмаркингаI do not believe max_input_time has any bearing on handling large uploads by users with slow connections.

Отhttp://us3.php.net/manual/en/info.configuration.php#ini.max-input-time

This sets the maximum time in seconds a script is allowed to parse input data, like POST and GET. It is measured from the moment of receiving all data on the server to the start of script execution.

Я использую PHP 5.3.8 и использовал следующую конфигурацию .htaccess

php_value max_input_time 5
php_value max_execution_time 1
php_value upload_max_filesize "2048M"
php_value post_max_size "2048M"

Мой тестовый скрипт:

<?php
if (!empty($_FILES)) {
    echo '<pre>';
    var_dump($_FILES);
    echo '</pre>';
}
?>
<form enctype="multipart/form-data" method="POST">
    File: <input name="userfile" type="file" />
    <input type="submit" value="Upload" />
</form>

После нескольких испытаний мой файл 1.5G занимает около16-17 seconds to upload, 4-5 seconds to processи время выполнения по существу равно 0.

Сmax_input_time 5 скрипт завершается. Установив значение 4, мы получимPHP Fatal error: Maximum execution time of 4 seconds exceeded in Unknown on line 0, referer: http://localhost/test-upload.php

Тоже кажетсяmax_execution_time не имеет никакого отношения, так как мы держали его на 1 на протяжении всех испытаний.

Просто хочу сказать, этот ответ неверен. В редких случаях медленное соединение может привести к ошибке «сломанный канал». Я только что исправил это сегодня, и он должен установить max_input_time равным 600. И я сейчас гуглюсь, как рассчитать max_input_time, но вижу только неправильный ответ.
Я добавлю, что в журналах ошибок все указанное время max_execution было достигнуто, а не max_input_time по какой-то причине, даже когда я установил для max_execution_time значение 10000.
Этот ответ совершенно неверен. Возможно, это было изменено в PHP 5.4? В любом случае, я могу на 100% подтвердить, что max_input_time вызовет ошибку 500, если загрузка файла займет больше времени, чем max_input_time. Я часами отлаживал эту проблему и, наконец, изменил это значение, и оно было исправлено. Протестировано на PHP 5.4.16 и IIS 7.5. Не только это, но и руководство по PHP теперь заявляет "Это устанавливает максимальное время в секундах, в течение которого скрипту разрешается анализировать входные данные, такие как POST и GET. Время начинаетсяat the moment PHP is invoked at the server и заканчивается, когда начинается выполнение & quot; который включает в себя время загрузки.goo.gl/FTfsD3
@ BenP.P.Tung, это важно. Пожалуйста, добавьте больше деталей.
Именно то, что я искал. Спасибо!
6

Это будет зависеть от того, как PHP соединен с веб-сервером.

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

Хотите предоставить дальнейшее чтение по этой теме? Это первый раз, когда я обнаружил, что обработка PHP вызывается в самом начале запроса, что влияет наmax_input_time, Благодарю.
@symcbean,Which реализация делает это? Не похоже, что это хороший способ для наложения приложений, поскольку сценарий PHP теперь должен был бы беспокоиться о таких вещах, как разрыв соединения на полпути и т. Д.
Я могу подтвердить, что это действительно происходит. Я получал ошибку 500 для больших файлов, загрузка которых заняла более 60 секунд. Я изменил только max_input_time, и он исправил это. Мало того, руководство php теперь имеет другую формулировку, чем приведенная выше. Теперь в нем говорится, что отсчет времени начинается «в момент вызова PHP на сервере», а не «с момента получения всех данных на сервере». Вы можете прочитать это здесь:goo.gl/FTfsD3, Странная вещь - ошибка в логах PHP, в которой указано max_execution_time, даже когда я установил его на 10000.

Похожие вопросы