PHP to najpopularniejszy obecnie język programowania do tworzenia skryptów po stronie serwera. Niestety zdarzają się takie błędy w kodzie, które mogą wywołać zimne dreszcze u tych osób, które nie do końca znają się na programowaniu.

Warto więc dowiedzieć się więcej o błędach PHP, co pozwoli nam w łatwy sposób je zinterpretować i sprawdzić, do jakiej kategorii zaliczyć dany błąd, i czy będziemy mogli naprawić go sami, czy lepiej zlecić to specjaliście.

Z tego tekstu dowiesz się:

  • jak dzielimy błędy PHP,
  • jak możemy raportować błędy PHP,
  • jak stworzyć niestandardowe reguły powiadomień.

Podstawowe typy błędów PHP

Tak naprawdę możemy mówić o dwóch podstawowych rodzajach błędów, które napotkamy podczas pracy z oprogramowaniem tego typu. Rozpoznamy je, nawet jeśli nie jesteśmy programistami i tylko korzystamy z serwera, na przykład w celu zainstalowania na nim bloga. Błędy te dzielą się na:

  • Błędy wewnętrzne – są to błędy logiczne w kodzie. Możemy im zapobiec dzięki starannemu programowaniu.
  • Błędy zewnętrzne – związane są one z „interakcją ze światem zewnętrznym” i nie są częścią kodu. Wśród nich możemy wymienić: niepowodzenie otwierania pliku lub bazy danych, zerwanie połączenia sieciowego, brak możliwości załadowania określonego modułu PHP i wiele innych. Tego rodzaju błędy zawsze mogą się zdarzyć i często nie będzie to spowodowane naszą winą. Jednocześnie odpowiednie przygotowanie naszego kodu na takie sytuacje pozwoli złagodzić skutki ich wystąpienia.

W jaki sposób radzić sobie z błędami?

W zarządzaniu błędami ważych jest kilka etapów, które pozwalają nam na procesowe podejście do tego typu zdarzeń. Ścieżka działania powinna wyglądać następująco:

  • Wyświetlenie błędu – umożliwia zweryfikowanie i „podejrzenie” błędu zarówno programiście, jak i użytkownikowi programu podczas jego użytkowania.
  • Stworzenie dziennika błędów – czyli przygotowanie dokumentu, który pozwala na zapisywanie i przeglądanie błędów w formie tekstowego pliku dziennika.
  • Działanie – czyli wykonanie czynności, które mają na celu naprawić lub obejść błąd.

Najważniejsze jest jednak to, aby unikać ignorowania błędów. Tego typu postępowanie doprowadzi do konsekwencji, które ostatecznie mogą przerodzić się w małą katastrofę. Dobre podejście do błędów PHP wymusza na nas skupienie się na wyświetlaniu, rejestrowaniu i obsłudze tychże.

Gdzie znajdziemy informacje o błędach?

Zależnie od tego, na jakim etapie chcemy sprawdzić występowanie błędów, będziemy ich inaczej szukać. W innym miejscu, gdy tworzymy kod, a w innym, gdy jest już on wdrożony. Istnieją trzy główne miejsca, gdzie możemy kontrolować błędy. Są to:

  • plik php.ini,
  • plik .htaccess na naszym serwerze internetowym,
  • nasz własny kod PHP.

W tych miejscach mamy cztery możliwości raportowania błędów. Są to:

  • error_reporting – ustawia poziom raportowania błędów. Wartość domyślna to “E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED”. Oznacza to, że nie zostaną pokazane błędy z kategorii „E_NOTICE, E_STRICT i E_DEPRECATED”.
  • display_errors – automatycznie ustawiony jest parametr „OFF”, jeśli zmienimy go na „ON” błędy będą wyświetlane na ekranie.
  • log_errors – wskazuje, czy system ma rejestrować błędy. Domyślnie wartość ta ustawiona jest na „ON”.
  • error_log string – wskazuje nazwę pliku, do którego mają być zapisywane błędy.

Poziomy błędów PHP

Obecnie PHP ma piętnaście predefiniowanych stałych błędów, które mają przypisane numery identyfikacyjne. Wszystkie, z rozbudowanym opisem, można znaleźć w tym miejscu. Poniżej skrócona lista.

Rodzaj błędu Opis
E_ERROR Błędy krytyczne pojawiające się w czasie wykonywania
E_WARNINGOstrzeżenia w czasie wykonywania (błędy niekrytyczne)
E_PARSEBłędy podczas kompilacji
E_NOTICEPowiadomienia pojawiające się podczas wykonywania
E_CORE_ERRORBłędy krytyczne pojawiające się w czasie uruchamiania (inicjacji)
E_CORE_WARNINGBłędy niekrytyczne pojawiające się w czasie uruchamiania (inicjacji)
E_COMPILE_ERRORBłędy krytyczne kompilacji
E_COMPILE_WARNINGOstrzeżenia podczas kompilacji
E_USER_ERRORKomunikat o błędzie generowany przez użytkownika
E_USER_WARNINGKomunikat ostrzegawczy wygenerowany przez użytkownika
E_USER_NOTICE Komunikat powiadomienia wygenerowany przez użytkownika
E_STRICTSugerowanie przez PHP zmian w kodzie, które zapewnią lepszą interoperacyjność i kompatybilność kodu w przyszłości
E_RECOVERABLE_ERROR Błąd krytyczny możliwy do wyłapania
E_DEPRECATED Powiadomienie o czasie wykonywania
E_USER_DEPRECATEDPowiadomienie o czasie wykonywania jak w przypadku E_DEPRECATED, jednakże jest generowane w kodzie PHP przy użyciu funkcji PHP
E_ALL Wszystkie błędy i ostrzeżenia

PHP.ini i wyświetlanie błędów

Poniżej znajduje się kilka przykładów, jak użyć poszczególnych opcji. Na przykład, jeśli chcemy użyć pliku php.ini, możemy zrobić to w następujący sposób:

1
2
display_errors = on
error_reporting = E_ALL

Podczas działania skryptów możemy zrobić to samo, wywołując komendę error_reporting:

1 error_reporting(E_ALL);

Aby włączyć rejestrowanie błędów i zapisać je w naszym własnym pliku dziennika (zamiast w domyślnym pliku dziennika, który często jest plikiem dziennika błędów serwera WWW lub pliku syslog), możemy skonfigurować PHP w następujący sposób:

1
2
log_errors = on
error_log = „/tmp/php-error.log”

W ten sposób możemy rejestrować błędy za pomocą kodu PHP:

1 error_log( „This code has errors!” );

Wyświetlanie błędów przy pomocy .htaccess

Deweloperzy, ale także osoby, które posiadają dostęp do plików instalacyjnych oprogramowania, mogą użyć pliku .htaccess do raportowania błędów. Aby tego dokonać należy w pliku zamieścić następującą wartość:

php_flag display_startup_errors on php_flag display_errors on

.htaccess pozwala na opcjonalne włączanie i wyłączenie informacji o błędach. Dotyczy to „display_startup_errors i display_errors”. To ogromna zaleta szczególnie dla deweloperów, którzy maja możliwość stworzenia oddzielnych plików dla zespołów produkujących i kodujących. Warto też pamiętać, że w zależności od tego, do jakich plików na serwerze mamy dostęp możemy modyfikować je w celu raportowania błędów. Jednakże nie wszyscy dostawcy usług hostingowych pozwalają nam na modyfikację pliku php.ini, dlatego dobrze wiedzieć, jak zrobić to przy pomocy .htaccess. Pamiętajmy, że w tym przypadku także mamy możliwość zmiany folderu lub pliku, do którego będziemy raportować błędy, na przykład:

php_value error_log logs/all_errors.log

Tutaj dochodzimy do etapu, w którym możemy powiedzieć o ostrzeżeniach i powiadomieniach. Wszystko dlatego, że czasami ostrzeżenia, które wydają się nie wpływać na aplikację na początkowym etapie, powodują błędy krytyczne pojawiające się tylko w pewnych warunkach. Oczywiście ostrzeżenia te muszą zostać naprawione, gdyż aplikacja nie będzie działać normalnie w niektórych scenariuszach. Kiedy błędów jest wiele, to lepszą opcją wydaje się ukrycie błędów i pokazanie jedynie komunikatów ostrzegawczych. Pomoże w tym komenda:

error_reporting(E_WARNING);

Wyświetlanie błędów oraz powiadomień jest proste. Aby wyświetlić ostrzeżenia i powiadomienia, parametrem funkcji raportowania błędów będzie “E_WARNING | E_NOTICE”. Funkcja raportowania błędów akceptuje parametry „E_ERROR, E_WARNING, E_PARSE i E_NOTICE”.

W celu zgłoszenia wszystkich błędów, ale z pominięciem powiadomień, należy wykorzystać parametr „E_ALL & ~ E_NOTICE”, gdzie E_ALL oznacza wszystkie możliwe parametry funkcji raportowania błędów. Funkcja raportowania błędów pozwala filtrować, które błędy mają być wyświetlane. Znak „~” oznacza „nie”, więc parametr ~ E_NOTICE oznacza brak wyświetlania powiadomień. Znak „&” oznacza „prawda dla wszystkich”, podczas gdy znak „|” reprezentuje jeden wynik, o ile jest to prawda. Te dwa znaki mają to samo znaczenie w warunkach PHP co „OR” i „AND”.

Niestandardowe wyświetlanie komunikatów

Samo wyświetlanie standardowych komunikatów o błędach PHP często nie wystarcza. Dlatego możemy tworzyć własne komunikaty korzystając z funkcji set_error_handler(). Poniżej przykład:

Kiedy wystąpi błąd, wywoływana jest niestandardowa funkcja obsługi błędów z argumentem numeru błędu i argumentem ciągu błędów. Te dwa argumenty są przekazywane z wywołania set_error_handler () do naszej funkcji. Wynikiem działania tego kodu byłoby:

Error: [8] Undefined variable: foo

Poniższy przykład pokazuje funkcję, która powinna wykryć typy błędów i zdecydować, jakie działanie podjąć i/lub jaki komunikat o błędzie wyświetlić.

Te przykłady pozwalają wyświetlać i obsługiwać typy błędów na różne sposoby oraz wyświetlać informacje o błędzie. Ważne jest, aby niestandardowa funkcja obsługi błędów była prosta i niezawodna. Istnieje kilka bibliotek PHP, które mogą pomóc w tworzeniu bardziej zaawansowanej obsługi błędów.

Błędy PHP – słowem podsumowania

Powyższy poradnik powinien pozwolić każdemu użytkownikowi PHP znaleźć i naprawić błędy, które mogą wystąpić podczas tworzenia kodu czy też uruchamiania skryptów i aplikacji. Warto znać chociażby podstawy dotyczące błędów w kodach, bo wtedy będziemy mogli przeanalizować, czy dalsze prace naprawcze jesteśmy wstanie wykonać samodzielnie, czy lepiej zlecić je wykonawcy z zewnątrz.

>
Artur Pajkert
Od 18 lat dzieli się wiedzą i poradami w sprawach e-marketingu i hostingu, jako menedżer, autor publikacji, prelegent, bloger, wykładowca akademicki.

Jedna odpowiedź na "Wszystko o raportowaniu błędów PHP"

  1. Bardzo fajnie przygotowana ściągawka, każdemu początkującemu w temacie na pewno się przyda 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Polecane dla Ciebie

Szukasz dalej?