PHP: Maximum execution time of 30 seconds exceeded — что делать
Скрипт PHP работал дольше, чем разрешает настройка max_execution_time, и PHP его остановил. По умолчанию лимит — 30 секунд. Его можно поднять в php.ini, но сначала выясните, почему скрипт работает так долго.
Содержание 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-out | nginx не дождался ответа PHP |
| 500 Internal Server Error без подробностей | как найти причину по журналу |
| другая ошибка PHP | найдите её в списке |
Источники
- Исходный код PHP 8.3.6: zend_execute_API.c — текст Maximum execution time of … seconds exceeded и Class "…" not found.
- Справка PHP: max_execution_time — по умолчанию 30 секунд, в командной строке 0 — без ограничения.
- Справка PHP: set_time_limit() — запускает отсчёт заново; вне Windows время системных вызовов, работы с потоками и запросов к базе не учитывается.
- Исходный код PHP 8.3.6: php_cli.c — в командной строке max_execution_time=0 и output_buffering=0 заданы жёстко, php.ini их не меняет.
- Файл php.ini-production из PHP 8.3.6 — значения для рабочих серверов: display_errors Off, log_errors On, max_execution_time 30, post_max_size 8M, upload_max_filesize 2M.
- Исходный код PHP 8.3.6: main.c — приставки PHP Startup и PHP Request Startup, тексты Failed opening и Failed opening required; при фатальной ошибке и выключенном display_errors PHP отвечает кодом 500.
- nginx: fastcgi_read_timeout — по умолчанию 60 секунд.
Сверено 14 октября 2026 года.
Что почитать дальше
- Ошибки PHPкак читать сообщение и где журнал.
- 504 Gateway Timeoutтаймауты nginx и журнал медленных запросов PHP.
- Ошибка 500 Internal Server Errorвсе причины и таблица записей журнала.
- Как установить PHP на UbuntuPHP-FPM, модули и php.ini.