Poetry of Programming

Bo kod jest sztuką ;)
  • rss
  • Główna
  • Wyszukiwanie

Rozwiązanie problemu z “Maximum execution time exceeded” w PHP

Krzysztof Karolczak | 24.07.2008

Komunikat krytycznego wyjątku PHP Maximum execution time of 30 seconds exceeded pojawiający się, gdy czas wykonania naszej aplikacji przekroczy 30 sekund, może być bardzo uciążliwy przy odpalaniu “cięższych” skryptów na serwerze, np. przy obróbce dużej ilości danych. Błąd ten jest również częstym gościem na ekranach tych, którzy używają serwerów Apacha zainstalowanych na systemach Windowsowych ;) (choćby i przy testowaniu projektów Symfony na domowym PC). Jednakże istnieje kilka szybkich i łatwych sposobów by zaradzić tej niedogodności :)!

Rozwiązanie 1 - Gdy mamy dostęp do plików konfiguracyjnych PHP.

Jeśli możemy wyedytować pliki konfiguracyjne PHP to problem sprowadza się jedynie do zmiany jednej linijki w PHP.ini. Plik ten zanjduje się zazwyczaj w głównym katalogu PHP (np. w moje instalacji PHP WAMP jest on w C:\wamp\bin\php\php5.2.5), wystarczy go otworzyć i odnaleźć linijkę:

max_execution_time = 30

Zmiana domyślnych 30 sekund na powiedzmy 120 powinna rozwiązać problem dla większości skryptów (normalnych skryptów ;)). Jedyne co nam pozostało to restart serwera www i jesteśmy w domku.

Rozwiązanie 2 - Na maszynie zdalnej.

Jest taka ładna funkcja PHP, która zwie się set_time_limit ( int $sec ), każde jej wywołanie ustawia licznik timeoutu na żądaną wartość (w sekundach) co oznacza że skrypt będzie mógł działać od teraz przez $sec sekund. Wywołanie set_time_limit(0) znosi ograniczenie czasu wykonania aplikacji.

Niestety funkcja ta nie będzie działać, jeśli PHP na serwerze działa w trybie bezpiecznym (safe mode). Więcej szczegółów można znaleźć w podręczniku PHP.

Timeout i serwery WWW :)

Warto wspomnieć iż serwery www również mają określony maksymalny dopuszczalny czas wykonania zapytania, np. dla Apacha domyślna wartość wynosi 300 sekund. 6 minut to więcej niż będzie nam potrzebne w 99,99% przypadków (czy w obecnych czasach wytrzymalibyście czekanie 5 minut aż się otworzy jakaś strona? ;) ), ale istnieje oczywiście możliwość zmiany tych ustawień. Wystarczy odszukać linijkę zaczynającą sie od słowa Timeout w pliku httpd-default.conf który znajduje się razem z innym plikami konfiguracyjnymi Apacha (np. u mnie jest to C:\wamp\bin\apache\apache2.2.6\conf\extra).

Kategorie
PHP
Tags
PHP, tips
Komentarze rss
Komentarze rss
Trackback
Trackback

« Symfoclipse - Środowisko Programistyczne dla Symfony na Eclipsa Konfiguracja web serwera tak by zyskał dostęp do katalogu symfony_data/web/sf/ »

Napisz komentarz

Możesz używać następujących tagów : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Język

  • English
  • Polski


Navigation

  • css
  • PHP
  • Symfony
    • Instalacja

Blogroll

  • Symfony

Tags

css (1) eclipse (1) framework (1) PDT (1) PHP (4) Symfony (1) tips (1) vhost (1)

rss Komentarze rss valid xhtml 1.1 design by jide powered by Wordpress get firefox