Сценарий PHP Испытывает таймаут после 45 секунд

Я выполняю огромный импорт в свою базу данных (о записях 200k), и у меня есть серьезная проблема с моим таймаутом сценария импорта. Я использовал свой сотовый телефон в качестве часов остановки и нашел, что он приводит к таймауту точно в 45 секунд каждой передачи (внутренняя ошибка сервера)... он только делает приблизительно 200 записей за один раз, иногда меньше. Я просканировал свой phpinfo (), и ничто не установлено на 45 секунд; таким образом я невежествен относительно того, почему это сделало бы это.

Мой max_execution_time установлен на 5 минут, и мой max_input_time установлен на 60 секунд. Я также пытался установить set_time_limit (0); ignore_user_abort (1); наверху моей страницы, но это не работало.

Может также быть полезно отметить, что мой ошибочный файл читает: "Преждевременный конец заголовков сценария" как ошибка выполнения.

Любая помощь значительно ценится.

5
задан Dave C 23 April 2010 в 16:27
поделиться

3 ответа

Во-первых, вы должны запустить сценарий из командной строки, если это займет некоторое время. . По крайней мере, ваш браузер будет отключен через 2 минуты, если он не получит контента.

php -f filename.php

Но если вам нужно запустить его из браузера, попробуйте добавить заголовок («Content-type: text / html») до того, как импорт начнется.

Если вы находитесь на общем хосте, то, возможно, существуют ограничения в системе, когда любые длительные запросы и / или скрипты автоматически завершаются через определенный промежуток времени. Эти ограничения обычно снимаются для скриптов, не работающих в Интернете. Таким образом, может помочь запуск его из командной строки.

0
ответ дан 18 December 2019 в 11:54
поделиться

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

Предполагая, что это какой-то тип Linux-сервера, вы можете увидеть свои ограничения ресурсов с помощью ulimit -a в командной строке. ulimit -t также покажет вам только ограничения на время процессора.

Если ваш процессор ограничен, вам, возможно, придется обрабатывать импорт партиями.

0
ответ дан 18 December 2019 в 11:54
поделиться

45 секунд могут быть совпадением - это может быть то, сколько времени вам понадобится, чтобы достичь предела памяти .. увеличение ограничение памяти будет примерно таким:

ini_set('memory_limit', '256M');

Это также может быть время ожидания фактического соединения с базой данных .. Какой сервер базы данных вы используете? Для меня время ожидания mssql истекает с крайне бесполезной ошибкой: "База данных контекст изменен ", по умолчанию через 60 секунд. Чтобы обойти это, сделайте:

ini_set('mssql.timeout', 60 * 10); // 10 min
0
ответ дан 18 December 2019 в 11:54
поделиться
Другие вопросы по тегам:

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