Napisany gru-31-2008

obsługa błędów w PHP cz.1

Błędy są nieodzownym elementem programowania. Poświęcamy im dość dużą ilość czasu, starając się skutecznie je eliminować. Programista zdaje sobie sprawę, że dobre oprogramowanie powinno cechować się sprawną obsługą wszelkich error’ów. Poznajmy więc błędy, które możemy napotkać, pisząc skrypty PHP.

lista błędów php 5.0

  • E_CORE_ERROR
  • E_CORE_WARNING
  • E_COMPILE_ERROR
  • E_COMPILE_WARNING
  • E_PARSE
  • E_ERROR
  • E_WARNING
  • E_NOTICE
  • E_STRICT
  • E_USER_ERROR
  • E_USER_WARNING
  • E_USER_NOTICE

Zapewne powyższe nazwy niewiele mówią, stąd konieczna staje się ich szczegółowa analiza. Tak więc zaczynamy!

E_CORE_ERROR i E_CORE_WARNING

Są to błędy inicjacji środowiska PHP (np. brak modułu). Poprzez display_startup_error w pliku php.ini możemy decydować, czy informacje o nich będą wyświetlane. Zaleca się ustawienie wartości tej dyrektywy na Off (tak jest defaultowo).

E_COMPILE_ERROR E_COMPILE_WARNING i E_PARSE

Należą do grupy błędów kompilacji. Najczęściej spotykany to E_PARSE. Jego przyczyna tkwi w niepoprawnej składni. Przykład:

E_PARSE

echo "ddsa';

Komunikat:

Parse error: syntax error, unexpected $end in example.php on line 5

Działania:

Przerywa działanie skryptu i generuje odpowiednią informację.

E_ERROR E_WARNING i E_NOTICE

Błędy czasu wykonania. Powodem ich wystąpienia są zazwyczaj nieudane wywołania funkcji PHP. Spójrzmy:

E_ERROR

funkcja();
echo "dzialam";

Komunikat:

Fatal error: Call to undefined function funkcja() in example.php on line 6

Działania:

Instrukcja echo nie jest już wykonywana! Działanie skryptu kończy się wraz w wystąpieniem tego błędu!

E_WARNING

mysql_connect('a');
echo "dzialam";

Komunikat:

Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host ‘a’ (1) in example.php on line 6

Działania:

Instrukcja echo jest wykonywana! Skrypt nie jest przerywany!

E_NOTICE

$zmienna;
echo $zmienna;
echo "dzialam";

Komunikat:

Notice: Undefined variable: zmienna in example.php on line 6

Działania:

Identycznie jak w przypadku E_WARNING.

E_STRICT

Ma na celu ułatwienie programistom dostosowania starszych aplikacji do PHP w wersji 5.

E_USER_ERROR E_USER_WARNING i E_USER_NOTICE

Błędy użytkowników. Są zgłaszane jawnie poprzez wywołanie trigger_error(). Funkcja ta przyjmuje dwa parametry. Pierwszym z nich jest komunikat, a drugim rodzaj error’u. Zobaczmy jak to działa.

E_USER_ERROR

trigger_error('Komunikat',E_USER_ERROR);
echo "dzialam";

Komunikat:

Fatal error: Komunikat in example.php on line 3

Działania:

Instrukcja echo nie jest już wykonywana! Działanie skryptu kończy się wraz w wystąpieniem tego błędu!

E_USER_WARNING

trigger_error('Komunikat',E_USER_WARNING);
echo "dzialam";

Komunikat:

Warning: Komunikat in example.php on line 3

Działania:

Instrukcja echo jest wykonywana! Skrypt nie jest przerywany!

E_USER_NOTICE

trigger_error('Komunikat',E_USER_NOTICE);
echo "dzialam";

Komunikat:

Notice: Komunikat in example.php on line 3

Działania:

Analogia do E_USER_WARNING.

konfiguracja

Przejdźmy do omówienia bardzo ważnej funkcji PHP - error_reporting(). Dzięki niej możemy ustawić tzw. raportowanie, czyli wykrywanie wystąpień poszczególnych rodzajów błędów. W php.ini identyczną funkcjonalność oferuje nam opcja error_reporting (defaultowo E_ALL & ~E_NOTICE). O wysłaniu komunikatów na wyjście decydujemy za pomocą dyrektywy display_errors, którą możemy zmodyfikować bezpośrednio (jeśli mamy dostęp do pliku php.ini) lub przy użyciu ini_set(). Zobaczmy:

// wszystkie bledy beda raportowane
error_reporting(E_ALL);

//ale zaden komunikat nie zostanie wyslany na wyscie
ini_set('display_errors','Off');

Następny przykład pokaże w jaki sposób logować błędy do pliku. Myślę, że nie będzie on wymagał dodatkowych wyjaśnień.

//raportowanie wszystkich bledow
error_reporting(E_ALL);

//nic nie trafi na wyjscie
ini_set('display_errors','Off');

//wlaczamy logowanie bledow
ini_set('log_errors','On');

//ustalamy plik dla logow
ini_set ('error_log','file.log');

das();

Oto jak przedstawia się zawartość pliku file.log:

[30-Dec-2008 12:30:30] PHP Fatal error: Call to undefined function das() in example.php on line 14

Rozwiązanie to ma bardzo dużą zaletę - komunikaty są ukrywane przed użytkownikami końcowymi aplikacji.

Tagi : ,

Napisz komentarz