Подтвердить что ты не робот

Отправка файла PHP затронута или нет с помощью max_input_time?

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

В этом ответе говорится, что он считает, что загрузка файлов не учитывается таймерами: qaru.site/info/193403/...

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

max_input_time устанавливает максимальное время, в секундах, scriptразрешено получать ввод; это включает в себя загрузку файлов. Для больших или несколько файлов или пользователей на более медленных соединениях, по умолчанию 60 секунды могут быть превышены

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

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

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

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

4b9b3361

Ответ 1

После небольшого бенчмаркинга я не верю, что max_input_time имеет какое-либо отношение к обработке больших загрузок пользователями с медленными соединениями.

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

Это устанавливает максимальное время в секундах, когда script разрешено анализировать входные данные, такие как POST и GET. Он измеряется с момента получения всех данных на сервере до начала выполнения script.

Я использую 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"

Мой тест script:

<?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 секунд для загрузки, 4-5 секунд для обработки, а время выполнения - по существу 0.

С max_input_time 5 завершается script. С его значением 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 во время тестов.

Ответ 2

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

Все подробности находятся на http://blog.hqcodeshop.fi/archives/185-PHP-large-file-uploads.html

Ответ 3

Он будет зависеть от того, как PHP подключен к веб-серверу.

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

Ответ 4

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

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

Это устанавливает максимальное время в секундах, когда script разрешено анализировать входные данные, такие как POST и GET. Сроки начинаются в тот момент, когда PHP вызывается на сервере и заканчивается, когда начинается выполнение.

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

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