#Что означает сообщение
Время выполнения превышено
Увеличьте max_execution_time или перенесите задачу в CLI/cron.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Малый лимит | Запрос ровно по лимиту PHP завершается | Оптимизировать или изменить обоснованный лимит |
| Тяжёлый запрос | В журнале длительный SQL-запрос | Проверить план и индексы |
| Внешний API | Ожидание ответа API длится слишком долго | Назначить тайм-аут клиента |
| Бесконечный цикл | Постоянно повторяется одна итерация | Устранить цикл и добавить контроль прогресса |
#Пошаговое решение
- Выясните, кто именно ограничивает выполнениеОткройте журнал PHP:
Maximum execution time of 30 seconds exceededотносится к PHP, а HTTP 504 может дополнительно означать тайм-аут обратного прокси или PHP-FPM. Сверьте код проблемной функции и длительность по журналу, определите, выполняется ли работа через браузер или планировщик.max_execution_timeу CLI часто не ограничен по умолчанию; настройки веб-сайта и терминала различаются. - Разбейте продолжительную операцию на частиЕсли скрипт обрабатывает тысячи записей, измените алгоритм на небольшие пакеты с сохранением прогресса после успешного пакета. Для SQL добавьте постраничное чтение или потоковую обработку, для HTTP-запросов — индивидуальные тайм-ауты и ограниченные повторы. Не делайте бесконечный цикл ожидания, а фиксируйте обработанные идентификаторы, чтобы повторный запуск не дублировал результаты.
- Перенесите фоновую задачу из веб-запроса в CLIДля регламентной работы предпочтительнее запуск из CLI через планировщик
cronили системный таймер, где можно отдельно ограничить память, общее время и журнал. Команду проверяйте вручную из каталога проекта, напримерphp /srv/app/bin/job.php, заменив путь на реальный и убедившись, что скрипт рассчитан на CLI. У cron другое рабочее окружение, поэтому используйте абсолютные пути и отдельную сервисную учётную запись. Не переносите просто HTTP-адрес в cron вместо реального обработчика. - Если нужен лимит, измените его адресно и проверьтеТолько после измерения администратор может задать в активной конфигурации веб-PHP обоснованный
max_execution_time, например60, согласовав его сrequest_terminate_timeoutPHP-FPM и тайм-аутами Nginx/Apache. Увеличение одного параметра не гарантирует успех. Повторите задачу, проверьте запись о завершении и отсутствие 504 и роста очереди рабочих процессов. Если скорость не меняется, верните прежний лимит и оптимизируйте код.
#На что обратить внимание
Не увеличивайте все тайм-ауты до часов для обычных веб-запросов: это займёт рабочие процессы и ухудшит доступность сайта. Проверьте обработку повторных запусков.