Неустранимая ошибка: превышено максимальное время выполнения 30 секунд

397

Я загружаю файл JSON из онлайн-источника, и когда он проходит через цикл, я получаю эту ошибку:

Неустранимая ошибка: максимальное время выполнения 30 секунд превышено в C: \ wamp \ www \ temp \ fetch.php в строке 24

Харша М.В.
источник
11
возможный дубликат Превышено максимальное время выполнения 60 секунд, что уже является дубликатом трех других. Пожалуйста, используйте функцию поиска, прежде чем спрашивать.
Гордон
«Функция set_time_limit () и директива конфигурации max_execution_time влияют только на время выполнения самого сценария. Любое время, затрачиваемое на действия, происходящие вне выполнения сценария, такие как системные вызовы с использованием system (), потоковые операции, запросы к базе данных и т. Д. . не учитывается при определении максимального времени выполнения сценария. Это не так для Windows "Из документации PHP
Джейкоб Санчес

Ответы:

722

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

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

а также

set_time_limit(300);

может быть использовано для временного продления срока.

Михель Патер
источник
95
set_time_limit (300) может использоваться для временного продления лимита времени.
Ом
Это установлено только для этого одного сценария или это повлияет на все остальные сценарии, выполняемые после этого на том же сервере?
Рао
1
@Rao да, это будет только для этого сценария. Чтобы сделать это для всех скриптов, вам нужно изменить его в файле php.ini. Вы также можете сделать set_time_limit (0); если вы хотите, чтобы скрипт работал вечно или долго
Haseeb
31
ini_set ('max_execution_time', 0); // без ограничений
Джунаид Атари
3
@sangam Я бы сказал, что лучше всего поддерживать этот предел как можно ниже, допуская определенное количество дополнительного буфера. Из соображений безопасности я бы не хотел выключать его полностью. Это должно быть разумным. На самом деле я установил его вдвое больше времени, которое мой самый долго работающий скрипт требует для завершения при среднем уровне нагрузки сервера. Тем не менее, это всегда может потерпеть неудачу. Поэтому передовой практикой также является решение проблем тайм-аутов для скриптов, занимающих много времени, отдельно.
Hafenkranich
185

У меня была та же проблема, и я решил ее, изменив значение параметра max_execution_timeв php.ini, например:

max_execution_time = 360      ; Maximum execution time of each script, in seconds (I CHANGED THIS VALUE)
max_input_time = 120          ; Maximum amount of time each script may spend parsing request data
;max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 128M           ; Maximum amount of memory a script may consume (128MB by default)

Я надеюсь, что это может помочь вам.

Güilber J. Castillo
источник
1
По какой-то причине ini_set не работает, но это точно помогает!
Габрян
php.iniможно найти в /etc/php5/apache2/php.ini.... Я использую Ubuntu 13.04 ...
Enissay
У меня была такая же проблема при установке Moodle на Wamp, но я решил настроить файл php.ini
Мухаммед Ирфан
1
Необходимо перезапустить apache после изменения в php.ini
spideringweb
[php7] - sudo nano /etc/php/7.0/apache2/php.ini
Крис Ламбру,
46

Все ответы выше верны, но в некоторых случаях я использую простой способ избежать этого.

Просто поместите эту команду в начале вашего скрипта:

set_time_limit(0);
Масса
источник
9
Это совсем не рекомендуется
я самый глупый человек
1
Отключенное ограничение по времени не защищает от бесконечных циклов, поэтому всегда устанавливайте (большее) ограничение.
Бимлас
@IamtheMostStupidPerson Почему бы и нет? Если вы используете его как localhost
Фернандо Торрес
23

Я столкнулся с этой проблемой при обновлении до WordPress 4.0 . По умолчанию WordPress ограничивает максимальное время выполнения 30 секундами.

Добавьте следующий код в ваш файл .htaccess в корневом каталоге вашей установки WordPress, чтобы переопределить стандартную настройку.

php_value max_execution_time 300  //where 300 = 300 seconds = 5 minutes
Фахим Хоссейн
источник
18

редактировать php.ini

Найдите эту строку:

max_execution_time

Измените его значение на 300:

max_execution_time = 300

300 означает 5 минут времени выполнения запроса http.

Джамиль Ахмед
источник
16

Ваш сценарий истекает. Взгляните на функцию set_time_limit (), чтобы увеличить время выполнения. Или профилируйте скрипт, чтобы он работал быстрее :)

tlenss
источник
1
@HarshaMV Он имеет в виду использование профиля производительности, чтобы определить, почему сценарий начинается медленно, и оптимизировать код для увеличения времени выполнения. Это может или не может быть полезно, в зависимости от того, что является узким местом (ЦП против дискового ввода-вывода против сети).
Дэн Бешард
12

если все вышеперечисленное не сработало, добавьте .htaccessфайл в каталог, где находится ваш скрипт, и поместите его внутрь

<IfModule mod_php5.c>
php_value post_max_size 200M
php_value upload_max_filesize 200M
php_value memory_limit 300M
php_value max_execution_time 259200
php_value max_input_time 259200
php_value session.gc_maxlifetime 1200
</IfModule>

таким образом я решил свою проблему, и ini_set('max_execution_time', 86400);не set_time_limit(86400)решил ее, но метод .htaccess сделал.

Нассим
источник
1
Это работает в моем случае. Спасибо. Замените M на G для GB
Web_Developer
11

Мы можем решить эту проблему тремя различными способами.

1) Использование файла php.ini

2) Использование файла .htaccess

3) Использование файла Wp-config.php (для Wordpress)

KarSho
источник
8

Вы можете снять ограничение, установив его на ноль, добавив эту строку вверху вашего скрипта:

<?php ini_set('max_execution_time', 0); ?>
Мванги Тига
источник
7

Следуй по пути /etc/php5(your php version)/apache2/php.ini.

Откройте его и установите max_execution_timeжелаемое значение.

Сучит Кумар
источник
На некоторых хостинг-провайдерах вам может потребоваться установить /home/[username]/.php/7.0/phprc
expertCode
7

Возможно, проверьте, что вы изменили в файле php.ini. Например, я изменил «; intl.default_locale =» на «; intl.default_locale = en_utf8» , чтобы включить «Расширение интернационализации (Intl)», не добавляя «extension = php_intl.dll», после чего возникла та же ошибка. Поэтому я предлагаю проверить на подобные ошибки.

Майк Г
источник
5

Для продления max_execution_timeвы можете использовать либо ini_setили set_time_limit.

// Set maximum execution time to 10 seconds this way
ini_set('max_execution_time', 10);
// or this way
set_time_limit(10);

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

sleep(2);
ini_set('max_execution_time', 5);

register_shutdown_function(function(){
    var_dump(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']);
});

for(;;);

//
// var_dump outputs float(7.1981489658356)
//

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

Различия между этими двумя функциями

  • set_time_limit не возвращает информацию об успешности, но выдает предупреждение об ошибке.
  • ini_setвозвращает старое значение в случае успеха или false при ошибке без предупреждения / ошибки
Buksy
источник
5

Вы можете сделать это легко с WHM. Просто надо:

WHM -> Конфигурация сервиса -> Конфигурация PHP

editor-> max_execution_time=30

(30 по умолчанию, измените его на любое значение, которое вы хотите)

паял
источник
2

У меня такая же проблема на сайте WordPress, я добавил в файл .htaccess, тогда у меня все работает нормально.

php_value max_execution_time 6000000
Анкит К Гупта
источник
0

Я сделал некоторые изменения в моем случае в: xampp \ phpMyAdmin \ library \ config.default.php

я искал: $cfg['ExecTimeLimit'] и изменить значение на правой стороне ...

Вы можете изменить значение Right hand на любое более высокое значение, например «5000». и это работает.

Имад Улла
источник