Ошибки

PHP: Maximum execution time of 30 seconds exceeded — что делать

Скрипт PHP работал дольше, чем разрешает настройка max_execution_time, и PHP его остановил. По умолчанию лимит — 30 секунд. Его можно поднять в php.ini, но сначала выясните, почему скрипт работает так долго.

≈ 5 мин чтения
Содержание 9

Как выглядит ошибка

На сайте под nginx ошибка попадает в журнал nginx: sudo tail -n 30 /var/log/nginx/error.log. Запись выглядит так:

FastCGI sent in stderr: "PHP message: PHP Fatal error:  Maximum execution time of 30 seconds exceeded in /var/www/example.com/import.php on line 57"
  • Fatal error — PHP остановил скрипт, страница не досчиталась до конца.
  • 30 seconds — лимит, который сейчас действует.
  • in … on line 57 — файл и строка, на которых скрипт застал лимит. Медленной может быть не сама эта строка, а цикл или функция, внутри которых она стоит.

Посетитель в это время видит ошибку 500 или обрезанную страницу: если до остановки PHP ещё ничего не отправил, он отвечает кодом 500. Подробнее — Ошибка 500 Internal Server Error.

Почему так

Настройка max_execution_time ограничивает, сколько секунд скрипт может выполняться. В файле php.ini-production, образце настроек для рабочих серверов, стоит 30. Для запуска из командной строки лимита нет: там max_execution_time равен 0.

В Linux считается только время, пока PHP сам выполняет код. Ожидание ответа базы данных, другого сайта или внешней программы в лимит не входит. Поэтому ошибку вызывает тяжёлая работа самого PHP: большой цикл, обработка картинок, разбор большого файла.

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

Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне. Откройте файл настроек PHP для сайтов:

sudo nano /etc/php/8.3/fpm/php.ini

Нажмите Ctrl+W, введите max_execution_time и нажмите Enter — курсор встанет на строку с этой настройкой. Поменяйте число после знака =, например на 120:

max_execution_time = 120

Сохраните файл: в nano — Ctrl+O, Enter, затем Ctrl+X. Перезапустите PHP, чтобы он прочитал новое значение:

sudo systemctl restart php8.3-fpm

Если команда ничего не ответила, PHP перезапущен. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter.

Команды — для PHP 8.3 из Ubuntu 24.04. В Ubuntu 26.04 стоит PHP 8.5: в путях и командах вместо 8.3 пишите 8.5. Какая версия у вас, покажет ls /etc/php/.

Лимит nginx: 60 секунд

У nginx свой лимит ожидания ответа от PHP — fastcgi_read_timeout, по умолчанию 60 секунд. Если скрипт молчит дольше, nginx не дождётся его и ответит посетителю ошибкой 504, хотя PHP продолжит работу. Поэтому лимит PHP выше 60 секунд без правки nginx не поможет: как поднять таймаут nginx.

Найти, какой скрипт работает долго, поможет журнал медленных запросов PHP-FPM — как его включить.

Если долго работает одна задача

Для долгих разовых задач — импорта товаров, перестройки поиска, рассылки — лимит для всего сайта поднимать не обязательно. Варианты:

  • Запустить скрипт из командной строки на сервере: php /var/www/example.com/import.php. Там лимита времени нет, а nginx в работе не участвует.
  • Попросить разработчика вызвать в начале скрипта set_time_limit(300) — функция задаёт лимит только для этого скрипта и запускает отсчёт заново.

Если ошибку выдаёт плагин или модуль готовой программы, проверьте его обновления: долгую работу разбивают на части, чтобы она укладывалась в лимит.

На виртуальном хостинге

На виртуальном хостинге файла php.ini на сервере у вас нет: лимит времени меняют в панели хостинга, если там есть такая настройка, или через поддержку.

Ошибки рядом

Что видитеЧто делать
Allowed memory size of … bytes exhaustedскрипту не хватило памяти
504 Gateway Time-outnginx не дождался ответа PHP
500 Internal Server Error без подробностейкак найти причину по журналу
другая ошибка PHPнайдите её в списке

Источники

Сверено 14 октября 2026 года.

Что почитать дальше