@Konyuh

Почему возникает ошибка Maximum execution time exceeded?

В php логах сайта имеется строка PHP Fatal error: Maximum execution time of 120 seconds exceeded
Минут через 10-15 работы останавливается скрипт (но никак не через 120 секунд, как указано в логах). При этом, в php.ini менял значение max_execution_time на 86400 секунд, также в самом php-скрипте в начале указано ini_set('max_execution_time', '86400') - никак не помогает.
В чем может быть причина остановки скрипта и появления данного лога? Где искать причину?
  • Вопрос задан
  • 436 просмотров
Пригласить эксперта
Ответы на вопрос 4
402d
@402d
начинал с бейсика на УКНЦ в 1988
Нужно катать сферические шары в вакуме. Их 1000 штук. Работник каждые 30 секунд уходит покурить.
Один шар он перекатывает за время от 1 до 3х секунд (то есть нет равномерности).

Запрещаем ему курить пока не перекатит все. А он сволочь такая лажает постоянно.
Решение
Вместо цикла
для всех шаров с 1 по 1000 делай катать
пишем
Напиши на доске номер шара - 1
Цикл
прочитай номер шара
засеки время
откати шар
он 1000 - й , то ты свободен
посмотри время
если прошло больше 25 секунд, то запиши номер следующего шара и иди курить
Ответ написан
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Потому что долгоиграющие задачи надо выполнять не через браузер, а в консоли.
Либо ручками, либо по крону (ну или через очереди, но этот вариант явно не соответствует уровню вопроса).
Ответ написан
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
зависит от среды в которой выполняется скрипт, если это какой-нибудь ВХ, то он вполне может переопределять ваши настройки - проверить можно банальным phpinfo()
что же до самой задачи, то проще разбить её на шаги и создать long controller: допустим нужно спарсить 10к страниц - отправляем запрос к LongController::startAction() который записывает данные в очередь/базу, далее ajax'ом вызываем LongController::stepAction() который выполняет столько шагов сколько успеет (допустим за минуту - значение берется из расчета max_execution_time / 2) и так до тех пор пока метод не вернет сообщение что задача завершена. Пример реализации для Yii2
Ответ написан
Комментировать
Минут через 10-15 работы останавливается скрипт (но никак не через 120 секунд, как указано в логах)

Посмотрите примечание в мануале, там всё описано. Несколько неудобно, что это примечание не продублировано в описании max_execution_time , но уж как есть
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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