Фатальна помилка: Максимальний час виконання - 30 секунд


397

Я завантажую файл JSON з інтернет-джерела, і коли він працює через цикл, я отримую цю помилку:

Фатальна помилка: Максимальний час виконання 30 секунд перевищено в C: \ wamp \ www \ temp \ fetch.php у рядку 24


11
можливий дублікат максимального часу виконання - 60 секунд, що є дублікатом трьох інших. Будь ласка, використовуйте функцію пошуку, перш ніж запитувати.
Гордон

"Функція set_time_limit () та директива конфігурації max_execution_time впливають лише на час виконання самого сценарію. Будь-який час, витрачений на діяльність, яка відбувається поза виконанням сценарію, наприклад системні виклики з використанням системи (), операцій потоку, запитів бази даних тощо . не включається при визначенні максимального часу запуску сценарію. Це не вірно для 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); якщо ви хочете, щоб сценарій виконувався назавжди, або тривалий час
Хазеб

31
ini_set ('max_execution_time', 0); // без обмежень
Джунайд Атарі

3
@sangam Я б сказав, що це найкраща практика, щоб цей ліміт був максимально низьким, дозволяючи певну кількість додаткового буфера. З міркувань безпеки я не хотів би повністю вимикати його. Це має бути встановлено розумним. Я фактично встановив його вдвічі більше часу, який мій тривалий сценарій займає для завершення під середнім рівнем напруги сервера. І все-таки це завжди могло зазнати невдачі. Тож найкраща практика також полягає в тому, щоб вирішувати питання, які очікують на очікування, для сценаріїв, що вимагають часу, окремо.
Хафенкраніч

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)

Я сподіваюся, що це може вам допомогти.


1
Чомусь ini_set не працює, але це точно допомагає!
габрян

php.iniможна знайти в /etc/php5/apache2/php.ini.... Я використовую ubuntu 13.04 ...
Enissay

У мене була така ж проблема при встановленні настрою на 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 (), щоб збільшити час виконання. Або профіліруйте сценарій, щоб він швидше працював :)


1
@HarshaMV Він має на увазі використовувати профіль продуктивності, щоб визначити, чому сценарій повільно починати, та оптимізувати ваш код, щоб поліпшити час виконання. Це може бути або не корисно, залежно від того, яке вузьке місце є (CPU vs. Disk I / O vs. Network).
Ден Бешард

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)


8

Ви можете видалити обмеження, встановивши його до нуля, додавши цей рядок у верхній частині сценарію:

<?php ini_set('max_execution_time', 0); ?>

7

Дотримуйтесь шляху /etc/php5(your php version)/apache2/php.ini.

Відкрийте його та встановіть значення max_execution_timeпотрібного.


Для деяких постачальників послуг хостингу вам може знадобитися встановити на /home
evidenceusernameSense/

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повертає старе значення на успіх або помилкове на помилку без будь-якого попередження / помилки

5

Ви можете легко зробити це з WHM. Щойно дісталося:

WHM -> Конфігурація послуги -> Конфігурація PHP

редактор-> max_execution_time=30

(30 за замовчуванням змініть його на значення, яке вам потрібно)


2

У мене така ж проблема на сайті WordPress, я додав у файл .htaccess, а потім добре працює для мене.

php_value max_execution_time 6000000

0

Я вніс деякі зміни у своєму випадку в: xampp \ phpMyAdmin \ libraryries \ config.default.php

Я шукав: $cfg['ExecTimeLimit'] і змінити значення праворуч ...

Ви можете змінити значення " Права рука" на будь-яке вище значення, наприклад "5000". і це працює.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.