Błąd krytyczny: przekroczony maksymalny czas wykonania 30 sekund


397

Pobieram plik JSON ze źródła online, a gdy przechodzi przez pętlę, pojawia się ten błąd:

Błąd krytyczny: przekroczony maksymalny czas wykonania 30 sekund w C: \ wamp \ www \ temp \ fetch.php w linii 24


11
możliwy duplikat przekroczonego maksymalnego czasu wykonania 60 sekund, który jest już duplikatem trzech innych. Przed zapytaniem skorzystaj z funkcji wyszukiwania.
Gordon

„Funkcja set_time_limit () i dyrektywa konfiguracyjna max_execution_time wpływają tylko na czas wykonania samego skryptu. Każdy czas spędzony na działaniach, które mają miejsce poza wykonaniem skryptu, takich jak wywołania systemowe za pomocą system (), operacje strumieniowe, zapytania do bazy danych itp. nie jest uwzględniany przy określaniu maksymalnego czasu działania skryptu. Nie jest to prawdą w systemie Windows ”Z dokumentacji PHP
Jacob Sánchez

Odpowiedzi:


722

Twoja pętla może być nieskończona. Jeśli tak nie jest, możesz przedłużyć maksymalny czas wykonania w następujący sposób:

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

i

set_time_limit(300);

może służyć do tymczasowego przedłużenia limitu czasu.


95
set_time_limit (300) może być użyty do tymczasowego przedłużenia limitu czasu.
Omn

Czy jest ustawiony tylko dla tego jednego skryptu, czy wpłynie na wszystkie inne skrypty wykonane po tym na tym samym serwerze?
Rao,

1
@Rao tak, będzie to tylko dla tego jednego skryptu. Aby zrobić to dla wszystkich skryptów, musisz to zmienić w pliku php.ini. możesz także zrobić set_time_limit (0); jeśli chcesz, aby skrypt działał wiecznie lub przez długi czas
Haseeb

31
ini_set ('max_execution_time', 0); // bez limitu
Junaid Atari

3
@sangam Powiedziałbym, że najlepszą praktyką jest utrzymanie tego limitu na jak najniższym poziomie, przy jednoczesnym zapewnieniu pewnej ilości dodatkowego bufora. Ze względów bezpieczeństwa nie chciałbym go całkowicie wyłączać. To powinno być rozsądne. Właściwie ustawiłem go na dwukrotność czasu, jaki mój najdłużej działający skrypt zajmuje do ukończenia na średnim poziomie obciążenia serwera. Mimo to zawsze może zawieść. Najlepszą praktyką jest więc osobne radzenie sobie z problemami z limitami czasochłonnymi skryptami.
Hafenkranich,

185

Miałem ten sam problem i rozwiązałem go, zmieniając wartość parametru max_execution_timew php.ininastępujący sposób:

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)

Mam nadzieję, że to może ci pomóc.


1
Z jakiegoś powodu ini_set nie działa, ale to na pewno pomaga!
gabrjan

php.inimożna znaleźć w /etc/php5/apache2/php.ini.... Używam ubuntu 13.04 ...
Enissay,

Miałem ten sam problem podczas instalowania Moodle na Wampie, ale rozwiązałem konfigurację pliku php.ini
Muhammad Irfan

1
Musisz zrestartować apache po zmianie w php.ini
spideringweb

[php7] - sudo nano /etc/php/7.0/apache2/php.ini
Chris Lambrou

46

Wszystkie powyższe odpowiedzi są poprawne, ale w niektórych przypadkach używam prostego sposobu, aby tego uniknąć.

Wystarczy umieścić to polecenie na początku skryptu:

set_time_limit(0);

9
To wcale nie jest zalecane
jestem najgłupszą osobą

1
Wyłączony limit czasu nie chroni przed nieskończonymi pętlami, dlatego zawsze ustaw (większy) limit.
bimlas

@IamtheMostStupidPerson Dlaczego nie? Jeśli użyjesz go jako localhost
Fernando Torres

23

Napotkałem ten problem podczas aktualizacji do WordPress 4.0 . Domyślnie WordPress ogranicza maksymalny czas wykonania do 30 sekund.

Dodaj następujący kod do pliku .htaccess w katalogu głównym instalacji WordPress, aby zastąpić domyślny.

php_value max_execution_time 300  //where 300 = 300 seconds = 5 minutes

18

Edytuj php.ini

Znajdź tę linię:

max_execution_time

Zmień jego wartość na 300:

max_execution_time = 300

300 oznacza 5 minut czasu wykonania dla żądania HTTP.


16

Upłynął limit czasu Twojego skryptu. Spójrz na funkcję set_time_limit (), aby zwiększyć czas wykonywania. Lub profiluj skrypt, aby działał szybciej :)


1
@HarshaMV Ma na myśli profil wydajności, aby ustalić, dlaczego skrypt zaczyna się powoli, i zoptymalizować kod, aby skrócić czas wykonywania. Może to być przydatne lub nie, w zależności od wąskiego gardła (procesor vs. dyskowe operacje we / wy vs. sieć).
Dan Bechard,

12

jeśli wszystkie powyższe nie zadziałały, dodaj .htaccessplik do katalogu, w którym znajduje się skrypt i umieść go w środku

<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>

w ten sposób rozwiązałem mój problem, ani ini_set('max_execution_time', 86400);nie set_time_limit(86400)rozwiązałem mojego problemu, ale metoda .htaccess tak zrobiła.


1
To działa w moim przypadku. Dziękuję Ci. Zamień M na G dla GB
Web_Developer

11

Możemy rozwiązać ten problem na 3 różne sposoby.

1) Za pomocą pliku php.ini

2) Korzystanie z pliku .htaccess

3) Korzystanie z pliku Wp-config.php (dla Wordpress)


8

Możesz usunąć ograniczenie, ustawiając je na zero, dodając ten wiersz u góry skryptu:

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

7

Podążaj ścieżką /etc/php5(your php version)/apache2/php.ini.

Otwórz i ustaw max_execution_timeżądaną wartość.


W przypadku niektórych dostawców usług hostingowych może być konieczne ustawienie /home/[nazwa_użytkownika]/.php/7.0/phprc
expertCode

7

Może sprawdź coś, co zmieniłeś w pliku php.ini. Na przykład zmieniłem „; intl.default_locale =” na „; intl.default_locale = en_utf8” , aby włączyć „rozszerzenie internacjonalizacji (Intl)” bez dodawania „rozszerzenia = php_intl.dll”, wtedy wystąpił ten sam błąd. Proponuję więc sprawdzić podobne błędy.



5

Aby przedłużyć max_execution_timemożna użyć jednej ini_setlub 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);

!! Należy jednak pamiętać, że obie funkcje uruchamiają się ponownie, a także odliczanie czasu, który skrypt już wykonał

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)
//

więc jeśli chcesz ustawić dokładny maksymalny czas działania skryptu, twoje polecenie musi być pierwsze.

Różnice między tymi dwiema funkcjami są

  • set_time_limit nie zwraca informacji, czy się udało, ale wyświetla ostrzeżenie o błędzie.
  • ini_setzwraca starą wartość w przypadku sukcesu lub fałsz w przypadku niepowodzenia bez żadnego ostrzeżenia / błędu

5

Możesz to zrobić z łatwością za pomocą WHM. Właśnie muszę:

WHM -> Konfiguracja usługi -> Konfiguracja PHP

edytor-> max_execution_time=30

(30 to domyślna zmiana na dowolną wartość)


2

Mam ten sam problem na stronie WordPress, dodałem plik .htaccess, a następnie działał dobrze dla mnie.

php_value max_execution_time 6000000

0

Wprowadziłem pewne zmiany w moim przypadku w: xampp \ phpMyAdmin \ libraries \ config.default.php

szukałem: $cfg['ExecTimeLimit'] i zmień wartość po prawej stronie ...

Możesz zmienić wartość prawej ręki na dowolną wyższą wartość, na przykład „5000”. i to działa.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.