PHP PHP 7PHP 8

PHP: Maximum execution time exceeded

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Скрипт работает дольше max_execution_time. Увеличьте лимит или переведите задачу в фон.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Как поднять лимит
  5. Если лимит не помогает
  6. Поиск причины
  7. Как проверить результат

#Что означает ошибка

Сообщение
Maximum execution time exceeded

«Fatal error: Maximum execution time of 30 seconds exceeded» означает, что PHP-скрипт работал дольше лимита max_execution_time. Чаще всего виноваты медленный запрос к базе, внешний API без таймаута, бесконечный цикл или обработка большого объёма данных.

Повышать лимит — временное решение; сначала найдите причину.

Для веб-запросов лимит защищает сервер.

Скрипт работает дольше max_execution_time. Увеличьте лимит или переведите задачу в фон.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Малый лимитmax_execution_time.Ошибка.Увеличьте.
Долгий скриптОперация.Тяжёлая.В фон.
Медленный запросБД.Долго.Индекс.
Внешние запросыAPI.Таймаут.Лимит.

#Пошаговое решение

  1. Найдите медленное местоПрочитайте журнал ошибок PHP-FPM или Apache и найдите файл, строку и тип операции, где достигнут Maximum execution time. Если используется PHP-FPM, администратор может включить request_slowlog_timeout и slowlog для конкретного пула на время диагностики; сначала сохраните конфигурацию. Если проблема возникает на одном запросе к базе или внешнему API, анализируйте его отдельно.
  2. Поднимите max_execution_timeПроверьте действующий max_execution_time для веб-сайта через панель хостинга или закрытую страницу с ini_get("max_execution_time"); php -i в CLI может показывать другое значение. Увеличивайте лимит только после выяснения, почему запрос медленный, и ненадолго в конкретном пуле/сайте, а не глобально. После изменения перезагрузите нужный PHP-FPM в согласованное окно и проверьте новую величину.
  3. Увеличьте таймауты веб-сервераСопоставьте таймаут PHP с Nginx fastcgi_read_timeout или Apache ProxyTimeout, а также с request_terminate_timeout PHP-FPM. Это разные ограничения: увеличение одного не отменяет другие. Не ставьте бесконечные таймауты; предварительно проверьте медленные SQL-запросы, блокировки, очереди и занятость воркеров. Перед изменением Nginx выполните nginx -t.
  4. Добавьте таймауты в API-запросыЕсли выполнение ждёт удалённый API, в PHP-коде найдите вызовы cURL или HTTP-клиента и установите разумные таймауты соединения и общего выполнения. Например, для cURL это CURLOPT_CONNECTTIMEOUT и CURLOPT_TIMEOUT, с обработкой curl_errno(). Не увеличивайте ожидание без ограничения: недоступный сервис иначе удерживает рабочие процессы PHP.
  5. Перенесите тяжёлую задачу в cronДля импорта больших файлов, генерации отчётов и пакетной обработки предложите разработчику перенести работу в фоновую очередь или задачу cron с сохранением прогресса и повторным запуском только недоделанных элементов. Сначала проверьте идемпотентность операции, затем протестируйте на небольшой порции; успешная проверка — отсутствие прежней ошибки без роста числа зависших процессов PHP-FPM.

#Как поднять лимит

В php.ini: max_execution_time = 120 (путь: php --ini). Для PHP-FPM перезапустите службу (systemctl restart php8.2-fpm). В скрипте: set_time_limit(300); или ini_set('max_execution_time', '300');. На хостинге лимит может задаваться в панели или .htaccess: php_value max_execution_time 120. Для CLI-скриптов лимит по умолчанию 0 (без ограничения).

#Если лимит не помогает

Для nginx увеличьте fastcgi_read_timeout 300;, иначе получите 504. Для Apache проверьте Timeout. В облачных хостингах лимит может быть жёстким и не меняться. Тогда вынесите обработку в очередь или cron-задачу.

#Поиск причины

Включите логирование медленных запросов (slow log PHP-FPM, slow_query_log MySQL). Профилируйте код с помощью Xdebug или Blackfire. Добавьте таймауты к curl (CURLOPT_TIMEOUT) и ограничьте выборки LIMIT. Обрабатывайте большие данные порциями.

Linux · Терминал (Bash)Команда
Поиск php.ini, проверка лимита и перезапуск PHP-FPM.
php --ini
php -i | grep max_execution_time
# Это значения CLI; действующий PHP-FPM и сайт могут использовать иной php.ini.

#Как проверить результат

После изменения лимита убедитесь, что настройка применилась: создайте файл с <?php phpinfo(); и найдите max_execution_time (удалите файл после проверки). Для CLI-проверки выполните php -r "echo ini_get('max_execution_time');". Отметьте, что в PHP время ожидания ответа внешних сервисов или запросов к БД не всегда учитывается в лимите на Linux, а sleep() не считается — поэтому реальное время ожидания может быть больше. Если скрипт всё равно падает, смотрите журнал ошибок PHP.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.