2011-02-02 2 views
17

Мой скрипт сравнивает 2 дерева источников, создает карту возможных измененных файлов, сравнивает хэши MD5 и создает diff-пакет.Неустранимая ошибка: превышено максимальное время выполнения 0 секунд

После 28000-29000 файлов, PHP завершает скрипт с ошибкой:

Fatal error: Maximum execution time of 0 seconds exceeded in /root/_PACKER-TESTER/core/diff.class.php on line 67 (standard in_array() call)

Я уже пытался установить max_input_time на высокое значение (или ноль) - ничего.

Установка max_execution_time до 99999999999999 ничего не делать .... такая же ошибка.

+0

Вашего 999..999 предельному время идет о 47-битовом числе, намного выше РНР 32-битный лимит. –

+0

Вы работаете в SafeMode? ([docs для set_time_limit] (http://us.php.net/set_time_limit)) ... – ircmaxell

+0

Marc B - для этого сообщения я просто нажимаю 9 раз, не считая, сколько :) Ofkz в коде я не превысил 32 бит :) – kiler129

ответ

9

Проблема решена, php сборка с litespeed api (lsapi) имеет дополнительную env переменную для определения макс выполнить время - LSAPI_MAX_PROCESS_TIME (значение по умолчанию - 300 секунд).

+0

, пожалуйста, отметьте свой собственный ответ, как принято, чтобы помочь другим. и я думаю, было бы здорово, если бы вы добавили среду CLI в свои теги/вопрос. –

+0

по умолчанию 300, но было ли оно установлено на ноль? – horatio

+1

MAX_PROCESS_TIME отличается от установленного лимита времени php. Максимальное время процесса было добавлено технологией litespeed, чтобы предотвратить злой скрипт, который цикл в течение нескольких месяцев ничего не делает [set_time_limit() - это время процессора, а не в реальном времени]. LSAPI запускает внутренний механизм тайм-аута php, я перезагрузил его до технологии LiteSpeed. Таким образом, переменные LSAPI_ * env имеют наивысший приоритет, чем значения php - это так классно в общих средах, пользовательский скрипт запускает сценарий выше глобальных ограничений, если только он не получает конфигурационный файл LiteSpeed ​​Web Server или доступ к веб-панели :) – kiler129

0

Попробуйте set_time_limit() и проверить в phpinfo(), если вы можете установить лимит времени:

set_time_limit(60*60);phpinfo();exit; 
+0

set_time_limit(), похоже, не помогает. Я запускаю скрипт с консоли на выделенном сервере (I'm root). – kiler129

+0

Это ограничение не действует в CLI. – Mchl

+0

Я не знал, что ... – Marc

19

Попробуйте установить max_input_time = -1 в php.ini или используя set_time_limit(-1). Это сработало для меня, не перестраивая PHP.

This article объясняет это красиво.

+3

Работали, как обаяние, та же ошибка и установка max_input_time = -1 сделали работу.Спасибо – amertkara

+0

Не нужно работать - настройки LSAPI_ * имеют более высокий приоритет, чем php.ini - администратор может предоставить пользователю доступ к некоторым параметрам php.ini без риска из-за ограничения, реализованного LSAPI. – kiler129

+0

Просто хотел добавить, что похоже, что параметр '0' или' -1' будет иметь тот же эффект. Благодарим за это, необходимо было обновить 'max_input_time' (с помощью' set_time_limit' в коде ничего не изменилось, как кажется, для «max_execution_time», для которого уже было «0»). Кажется, что сообщение об ошибке выводит значение «max_execution_time», даже если оно фактически является параметром «max_input_time», который запускает таймаут. PHP 5.5.9 на ubuntu 14.04 – Programster

0

Я обнаружил, что «максимальное время выполнения 0 секунд превышено» может быть вызвано тем, что код переходит в бесконечный цикл.

Например:

while (true) { ... } 

причины этой ошибки для меня.

Если это не переменная окружения (как упоминалось выше), я бы рассмотреть, что на номере строки, сообщает РНР с ошибкой

Смежные вопросы