2011-02-02 32 views
17

Mój skrypt porównuje 2 drzewa źródłowe, tworzy mapę możliwych zmienionych plików, porównuje skróty MD5 i tworzy pakiet diff.Błąd krytyczny: przekroczono maksymalny czas wykonania 0 sekund

Po 28000-29000 plików PHP skrypt kończy się błędem:

Fatal error: Maximum execution time of 0 seconds exceeded in /root/_PACKER-TESTER/core/diff.class.php on line 67 (standard in_array() call)

Próbowałem już ustawić max_input_time do dużej wartości (lub zera) - nic.

Ustawienie max_execution_time na 99999999999999 nic nie rób ... ten sam błąd.

+0

Twój 999..999 granicznej przychodzi czas dotyczy liczby 47 bitowe, znacznie powyżej PHP 32-bitowy limit. –

+0

Czy używasz trybu SafeMode? ([dokumenty dla set_time_limit] (http://us.php.net/set_time_limit)) ... – ircmaxell

+0

Marc B - Dla tego postu po prostu wciskam 9 wiele razy nie licząc ile :) Ofkz w kodzie I nie przekracza 32 bitów :) – kiler129

Odpowiedz

9

problem rozwiązany, php budować z litespeed api (lsapi) ma dodatkowy env zmiennej do określenia max wykonać czasu - LSAPI_MAX_PROCESS_TIME (domyślnie jest to 300 sekund).

+0

proszę oznaczyć własną odpowiedź jako zaakceptowaną, aby pomóc innym. i myślę, że byłoby fajnie, gdyby dodać środowisko CLI do tagów/pytanie. –

+0

domyślnie wynosi 300, ale czy ustawiono na zero? – horatio

+1

MAX_PROCESS_TIME różni się od ustawionego limitu czasu php. Maksymalny czas procesu został dodany przez technologię litespeed, aby zapobiec tworzeniu złego skryptu, który przez wiele miesięcy nic nie robi [set_time_limit() to czas procesora, a nie czas rzeczywisty]. Funkcja LSAPI uruchamia mechanizm wewnętrznego limitu czasu php, a następnie zsynchronizowałem go z technologią LiteSpeed. Tak więc, zmienne LSAPI_ * env mają najwyższy priorytet niż wartości php - jest tak fajny w współdzielonych środowiskach, użytkownik nie może uruchamiać skryptu powyżej globalnych limitów, chyba że uzyska plik konfiguracyjny LiteSpeed ​​Web Server lub dostęp do panelu WWW :) – kiler129

0

Spróbuj set_time_limit() i sprawdzić w phpinfo() jeśli jesteś w stanie ustawić limit czasu:

set_time_limit(60*60);phpinfo();exit; 
+0

set_time_limit() nie wydaje się pomóc. Uruchamiam skrypt z konsoli na dedykowanym serwerze (jestem rootem). – kiler129

+0

Ten limit nie obowiązuje w CLI. – Mchl

+0

Nie wiedziałem, że ... – Marc

19

Spróbuj ustawić max_input_time = -1 w php.ini lub używając set_time_limit(-1). To działało dla mnie bez odbudowy PHP.

This article wyjaśnia to ładnie.

+3

Pracowałem jak urok, miałem ten sam błąd i ustawienie max_input_time = -1 wykonały pracę.Dzięki – amertkara

+0

Nie musi to działać - ustawienia LSAPI_ * mają wyższy priorytet niż php.ini - administrator może dać użytkownikowi dostęp do niektórych opcji php.ini bez ryzyka z powodu ograniczenia implementowanego przez LSAPI. – kiler129

+0

Chciałem tylko dodać, że wydaje się, że ustawienie "0" lub "-1" będzie miało ten sam efekt. Dzięki temu konieczne było zaktualizowanie 'max_input_time' (użycie' set_time_limit' w kodzie nie zmieniło niczego, co wydaje się być związane z 'max_execution_time', który był dla mnie ustawiony na' 0'). Komunikat o błędzie wydaje się ouput niezależnie od tego, co 'max_execution_time' jest ustawione, nawet jeśli jest to faktycznie ustawienie' max_input_time', które wyzwala limit czasu. PHP 5.5.9 na Ubuntu 14.04 – Programster

0

Znalazłem "maksymalny czas wykonania 0 sekund przekroczony" może być spowodowane przez kod wchodzący w nieskończoną pętlę.

Na przykład:

while (true) { ... } 

przyczyny tego błędu dla mnie.

Jeśli to nie jest zmienna (jak wspomniano wcześniej) Chciałbym sprawdzić, co znajduje się na linii numer zgłoszonych przez php z błędem

Powiązane problemy