PHP zgłasza błędy w odpowiedzi na różne wewnętrzne warunki błędów. Mogą być one użyte do zasygnalizowania różnych błędnych sytuacji i można je wyświetlić lub zapisać do logów, zależnie od potrzeb.
Każdy błąd generowany przez PHP jest określonego typu. Dostępna jest lista tych typów wraz z krótkim opisem ich zachowania i tego, przez co mogą być wywołane.
Jeżeli nie ustawiono handlera - funkcji obsługującej błędy, PHP obsłuży
każdy występujący błąd zgodnie ze swoją konfiguracją. To, które błędy są
raportowane, a które ignorowane zależy od dyrektywy
error_reporting
w pliku php.ini lub od wywołania funkcji error_reporting()
w trakcie działania skryptu. Wysoce zalecane jest ustawienie dyrektywy
konfigurcacyjnej, ponieważ niekóre błędy mogą wystąpić jeszcze przed
rozpoczęciem wykonywania Twojego skryptu.
W środowisku deweloperskim powinieneś mieć zawsze ustawiony
error_reporting
na E_ALL
, ponieważ musisz wiedzieć o problemach zgłaszanych
przez PHP i naprawić je. Na produkcji prawdopodobnie będziesz chciał ustawić to
na poziom dający mniej informacji, taki jak
E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
, ale
w wielu wypadkach E_ALL
także jest odpowiednie, gdyż może
zagwarantować wczesne ostrzeżenie o potencjalnych problemach.
To, co PHP robi z tymi błędami zależy od dwóch kolejnych ustawień php.ini.
display_errors
określa czy błędy są pokazywane jako część wyniku działania skryptu. Ta opcja
powinna zawsze być wyłączona w środowisku produkcyjnym, ponieważ może zawierać
poufne informacje, takie jak hasła do bazy danych, jednak zazwyczaj jest dobrze
włączyć ją w śodowisku deweloperskim, gdyż gwarantuje natychmiastowe powiadomienie
o problemach.
Poza wyświetlaniem błędów, PHP może również zapisywać je do logów, gdy
log_errors
jest włączone. To zapisze błędy do logu systemowego lub pliku określonego
przez opcję
error_log
. Jest
to szczgólnie użyteczne w środowisku produkcyjnym, bo możesz zapisać wszystkie
błędy jakie wystąpią i później generować raporty na ich podstawie.
Jeżeli domyślna obsługa błędów przez PHP jest niewystarczająca, możesz także obsłużyć wiele typów błędów przez swój własny handler, który ustawia się używając funkcji set_error_handler(). Mimo iż niektóre typy błędów nie mogą być obsłużone w ten sposób, reszta może być obsłużona w sposób, który odpowiada potrzebom skryptu: na przykład pokazując specjalną stronę błędu użytkownikowi, a bardziej szczegółowe informacje zapisując do logu lub wysyłając emailem.