Ошибка fatal error maximum execution time of

Почему возникает ошибка

Ошибка maximum execution time появляется когда скрипт работает дольше, чем разрешено в настройках PHP:

<?php
// Устанавливаем максимальное время (1 секунда)
set_time_limit(1);

// Ждём 2 секунды и получаем ошибку
sleep(2);

Результатом работы этого скрипта будет ошибка:

Fatal error:
Maximum execution time of 1 second exceeded in
D:ProgramsOpenServerdomainstest.localindex.php on line 6

Почему скрипт чаще всего выполняется медленно:

  • Слишком много вычислений в коде, которые сервер не может выполнить за разрешённое время
  • Медленные SQL-запросы
  • Медленные внешние запросы к другим сайтам/веб-сервисам
  • Бесконечные циклы или рекурсия

Как исправить ошибку

В каждой ситуации решение индивидуальное. Часто проблему можно решить просто увеличив максимально разрешённое время работы скрипта (разрешено не на всех хостингах).

Увеличение времени работы скрипта в .htaccess (указывается в секундах):

php_value max_execution_time 300

В php.ini:

max_execution_time = 300;

Либо напрямую в PHP:

ini_set('max_execution_time', 300);

// Или так
set_time_limit(300);

У функции set_time_limit есть одна особенность — она начинает отсчёт времени работы скрипта с нуля.

Т.е. если время работы изначально было 10 секунд, а через 5 секунд был выполнен код set_time_limit(20);, то в итоге скрипт будет выполняться не более 25 секунд.

Отлов и обработка ошибки

Хоть ошибка и является фатальной, её появление можно отловить и обработать с помощью функции register_shutdown_function():

<?php
// Отключаем вывод текста ошибки на экран
ini_set('display_errors', 0);

register_shutdown_function(function() {

	$e = error_get_last();

	if($e and $e['type'] == 1) {
		echo 'Фатальная ошибка!';
	}
});

// Устанавливаем макс время - 1 секунду
set_time_limit(1);

// Ждём 2 секунды и получаем ошибку
sleep(2);

При выполнении этого кода на экран выведется сообщение Фатальная ошибка!.

Единственный нюанс — условие $e[‘type’] == 1 отработает для любых фатальных ошибок, а не только для Maximum execution time.

Optimize your code

You need to optimize your code and look for errors.

For example, you could mistakenly create an endless loop. Obviously, in this case increasing the execution time won’t help.

Or, given you are storing the received data in the database, there are techniques that can greatly improve the performance, such as using transactions or multi-insert queries.

Profile your code, find performance bottlenecks and optimize them.

Run as CLI

In case the code is already optimized but inevitably takes too much time, consider execute it not as a web-page call but as a command line script. When called from a command line, PHP scripts aren’t affected by the time limit.

For example, you can configure this JSON download as a cron job, or implement some queue, when your web-page only creates a job, that takes a fraction of second, while some background process will take time to download, parse and store your JSON.

Increase the time limit

As a last resort you could temporarily extend the time limit, using either

ini_set('max_execution_time', '300'); //300 seconds = 5 minutes

or

set_time_limit(300);

Добрый день!

При обновлении темы у меня в админке появилась ошибка Fatal Error: Maximum Execution Time Exceeded. Как ее исправить?

Ответ

Как известно, CMS WordPress написана на языке PHP. Хостинги, для защиты сайтов от злоумышленников, устанавливают лимит времени работы каждого PHP-скрипта. У некоторых хостинг-провайдеров это значение выше, а у других — ниже. Если скрипт достигает этого лимита, то возникает ошибка Fatal Error: Maximum Execution Time Exceeded.

Ошибка Fatal Error: Maximum Execution Time Exceeded

Ошибку можно исправить двумя способами, которые позволяют увеличить это время, дав возможность успешному завершению работы скрипта.

Способ 1. Ручное редактирование файла .htaccess

Этот способ подразумевает добавление в файл .htaccess (расположенный в корневом каталоге Вашего сайта) специальной директивы, дающей команду веб-серверу увеличить лимит времени для работы скриптов. Если Вы знаете, как посмотреть .htaccess на своем хостинге, советуем ознакомится со статьей: Как подключиться по ftp к файлам своего сайта.

Итак, в самый конец .htaccess необходимо добавить следующую строку:

php_value max_execution_time 300

Значение 300 является временем (в секундах), которое может быть как увеличено, так и уменьшено. Если ошибка все равно возникает, следует значение увеличить до 600.

С перегрузкой хостинга нередко связана еще одна ошибка — connect timed out.

Способ 2. Плагин WP Maximum Execution Time Exceeded

Если Вы не желаете самостоятельно редактировать какие-либо файлы Вашего сайта, можно воспользоваться бесплатным плагином WP Maximum Execution Time Exceeded, который автоматически, без каких-либо настроек со стороны пользователя, увеличит лимит времени на выполнение PHP-скриптов до 300 секунд.

Читайте также: Request failed with status code 504 — что за ошибка, как переводится, и чтос ней делать.

Нажмите, пожалуйста, на одну из кнопок, чтобы узнать понравилась статья или нет.

  • Решение проблемы с помощью ini_set

  • Решение проблемы с помощью php.ini

  • Причина возникновения ошибки Maximum execution time exceeded

Ошибка возникает, когда скрипт выполняется больше определённого в настройках времени. По умолчанию это 30 секунд. Решением проблемы может стать увеличение времени исполнения скриптов php.

Решение проблемы с помощью ini_set

Можно прописать в начале кода PHP конструкцию, которая увеличит время исполнения скрипта до 600 секунд:

ini_set('max_execution_time', 600);

В WordPress её можно определить в файле wp-config.php в корне сайта после определения константы define( 'WP_DEBUG', false );

Решение проблемы с помощью php.ini

  1. <?=phpinfo();?>

    С помощью phpinfo находим расположение php.ini. Например, он может располагаться тут: /etc/php5/fpm/php.ini
    phpinfo php.ini

  2. В php.ini находим директиву max_execution_time
  3. Вносим изменения в неё, увеличивая время исполнения до 600 секунд:
    max_execution_time = 600
  4. Перезапускаем PHP консольной командой в SSH для PHP-FPM:
    service php5-fpm restart

    Или для Apache:

    service apache2 restart

Проблема часто заключается в неверно построенной архитектуре кода.

  • Импорт одномоментно большого количества данных. Увеличение max_execution_time в данном случае оправданно, однако, позаботьтесь, чтобы NGINX не возвращал 504 ошибку, не дождавшись ответа от бекенда в отведённый срок.
  • Проблемой также может послужить зацикленная рекурсия на основе While.
  • Либо же долгое исполнение может быть из-за долгого получения данных из базы данных.
  • Также, проблемой может служить слишком долгое ожидание ответа от внешнего ресурса, скажем, через file_get_contents

Загрузка…

При обновлении OpenCart 3.0.3.2 до версии 3.0.3.7 на Open Server, получил ошибку при попытке выполнить обновление:

Fatal error: Maximum execution time of 60 seconds exceeded

Данная ошибка означает, что выполнение определенной операции, привело к превышению временного лимита, указанного в конфигурации PHP. Вы можете изменить значение этого параметра, который указывается в секундах. По умолчанию в Open Server выставлен лимит в 60 секунд, для параметра «max_execution_time» в настройках PHP. Зачастую, выполнение скрипта не превышает 30 сек и данного лимита в 60 секунд, должно вполне хватать.

Если данная ошибка, возникает у вас на хостинге, настоятельно рекомендую обратиться к вашему хостинг-провайдеру для решения данной проблемы. На некоторых виртуальных хостингах (shared-хостинг), может стоять лимит на 30 секунд и нет возможности изменить его через админку.

Если у вас возникает ошибка «Fatal error: Maximum execution time of 60 seconds exceeded» при работе с Open Server, необходимо изменить время для выполнения скрипта в конфигурации PHP. Рассмотрим два способа, как это сделать.

На заметку.
Не пытайтесь вносить правки в файл конфигурации PHP по пути: «C:OpenServermodulesphpPHP-ваша_версия». Файл «php.ini» находящийся по данному пути, является временным и его бесполезно править. При перезапуске Open Server, файл перезаписывается с настройками по умолчанию. Ниже, описаны рабочие способы, которые помогут произвести нужные манипуляции с параметрами PHP.

Способ 1.

Увеличить лимит времени «max_execution_time», через интерфейс Open Server.

Открываем системный трей (1.) и щелкаем правой кнопкой мыши по флажку (2.) Open Server. Переходим по пути:

«Дополнительно» (3.) -> «Конфигурация» (4.) -> «PHP_7.3» (5.)

Обратите
внимание, что у вас, может отличатся версия PHP, в зависимости от того, какую версию вы выбрали. В моем примере, это PHP 7.3.

В открывшемся окне

ищем:

max_execution_time

Чтобы найти быстро нужный параметр, можно воспользоваться поиском. Выберите «Поиск» -> «Найти»:

В открывшемся поле поиска (1.), вставляем «max_execution_time» (без кавычек) и получаем результат (2.):

Теперь, меняем лимит «60», на «6000» к примеру. Или, на любой другой показатель. В своем примере, изменю лимит «max_execution_time» на «6000»:

Сохраняем изменения. Для этого, нажимаем: «Файл» -> «Сохранить».


Закрываем окно и перезапускаем сервер Open Server. Для этого, открываем системный трей (1.) и щелкаем по флажку (2.) правой кнопкой мыши, выбираем «Перезапустить» (3.):

После этого, все должно работать.

Стабильный и доступный виртуальный хостинг и VPS для сайтов любой любой сложности и нагруженности. Защита от DDoS и качественное администрирование. Хостинг-провайдер для тех, кто ценит стабильность и безопасность.

Способ 2. 

Увеличить лимит времени «max_execution_time», через сторонний редактор кода в Open Server.

Идем по пути:

C:OpenServeruserdataconfigваша_версия_PHP

В папке config, необходимо найти файл «PHP_ваша_версия_php.ini».

В моем примере, выберу файл «PHP_7.3_php.ini»:

Чтобы открыть файл и раскомментировать «ionCube» в конфигурации PHP, используйте Notepad++ или любой другой редактор.

Для правки файлов, есть удобный редактор Visual Studio Code: https://code.visualstudio.c…
Есть русский язык: https://marketplace.visuals…

Открываем файл «PHP_ваша_версия_php.ini» и ищем

max_execution_time

 В своем примере, воспользуюсь редактором Visual Studio Code и открою в нем файл «PHP_7.3_php.ini»:

Теперь, чтобы быстро найти расширение «max_execution_time», открываем «Правка» -> «Найти»:

В поле поиска (1.), вставляем «max_execution_time» (без кавычек) и получаем результат (2.):


Теперь, меняем лимит «60», на любой другой
показатель который нужен. В своем примере, изменю лимит «max_execution_time» на
«6000»:

Сохраняем изменения. Для этого, нажимаем: «Файл» -> «Сохранить».


Закрываем окно и перезапускаем сервер Open Server (смотрим скрины выше из Способ 1).

Таким образом, мы изменили с вами лимит «max_execution_time».

После этого, все должно работать. 

По теме: «Как включить ionCube в шаблоне конфигурации PHP на Open Server?»

Надеюсь, данная заметка, будет вам полезной. Успехов.

Понравилась статья? Поделить с друзьями:
  • Ошибка fatal error loading pixel shader
  • Ошибка fatal error has occurred this connection is terminated
  • Ошибка fatal error failed to load il2cpp
  • Ошибка fatal error failed to initialize
  • Ошибка fatal error failed to connect with local steam