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:
Działania:
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:
Działania:
E_WARNING
mysql_connect('a');
echo "dzialam";
Komunikat:
Działania:
E_NOTICE
$zmienna; echo $zmienna; echo "dzialam";
Komunikat:
Działania:
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:
Działania:
E_USER_WARNING
trigger_error('Komunikat',E_USER_WARNING);
echo "dzialam";
Komunikat:
Działania:
E_USER_NOTICE
trigger_error('Komunikat',E_USER_NOTICE);
echo "dzialam";
Komunikat:
Działania:
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:
Rozwiązanie to ma bardzo dużą zaletę - komunikaty są ukrywane przed użytkownikami końcowymi aplikacji.
