PHPPHP - (Hypertext Preprocessor) to popularny język skryptowy, który jest szeroko stosowany w tworzeniu dynamicznych stron internetowych oraz aplikacji webowych. PHP jest językiem open-source, co oznacza, że jest dostępny bezpłatnie i może być modyfikowany przez użytkowników. Jednym z głównych zastosowań PHP jest generowanie dynamicznych treści na stronach internetowych. Dzięki PHP możliwe jest tworzenie stron, które reagują na dane wprowadzone przez użytkowników, co jest kluczowe w przypadku aplikacji takich jak sklep internetowy czy...Czym jest 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 .htaccessPlik .htaccess znany również jako 'Hypertext Access', jest konfiguracyjnym plikiem dla serwerów opartych na Apache. Pozwala on na zarządzanie ustawieniami serwera na poziomie katalogu, bez potrzeby bezpośredniego dostępu do głównego pliku konfiguracyjnego Apache. Nazwa pliku zaczyna się od kropki, co w systemach Unix/Linux oznacza plik ukryty. Plik .htaccess zawiera dyrektywy konfiguracyjne, które regulują różne aspekty działania serwera, takie jak przekierowania, autoryzacja dostępu, kontrola błędów, cache'owanie i reguły przepisywania adresów URL...Czym jest 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ż aplikacjaAplikacja to program komputerowy lub mobilny, który wykonuje określone zadania na urządzeniu użytkownika. Aplikacje mogą być przeznaczone do różnych celów, od zarządzania dokumentami, przez gry, po obsługę transakcji w sklepie internetowym. Zrozumienie, czym jest aplikacja i jakie ma zastosowanie, jest kluczowe zarówno dla użytkowników, jak i właścicieli firm. Jakie są rodzaje aplikacji? Aplikacje dzielą się na kilka kategorii: desktopowe (instalowane na komputerze), mobilne (na smartfony i tablety) oraz webowe (uruchamiane...Czym jest 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 z kubkiem cyber_Folks
>
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ź do "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 e-mail nie będzie opublikowany.

Polecane dla Ciebie

Szukasz dalej?

Przeglądaj wg dat
  • Przeglądaj wg dat
  • styczeń 2025
  • grudzień 2024
  • listopad 2024
  • październik 2024
  • wrzesień 2024
  • sierpień 2024
  • lipiec 2024
  • czerwiec 2024
  • maj 2024
  • kwiecień 2024
  • marzec 2024
  • luty 2024
  • styczeń 2024
  • grudzień 2023
  • listopad 2023
  • październik 2023
  • wrzesień 2023
  • sierpień 2023
  • lipiec 2023
  • czerwiec 2023
  • maj 2023
  • kwiecień 2023
  • marzec 2023
  • luty 2023
  • styczeń 2023
  • grudzień 2022
  • listopad 2022
  • październik 2022
  • wrzesień 2022
  • sierpień 2022
  • lipiec 2022
  • czerwiec 2022
  • maj 2022
  • kwiecień 2022
  • marzec 2022
  • luty 2022
  • styczeń 2022
  • grudzień 2021
  • listopad 2021
  • październik 2021
  • wrzesień 2021
  • sierpień 2021
  • lipiec 2021
  • czerwiec 2021
  • maj 2021
  • kwiecień 2021
  • marzec 2021
  • luty 2021
  • styczeń 2021
  • grudzień 2020
  • listopad 2020
  • październik 2020
  • wrzesień 2020
  • sierpień 2020
  • lipiec 2020
  • czerwiec 2020
  • maj 2020
  • kwiecień 2020
  • marzec 2020
  • luty 2020
  • styczeń 2020
  • grudzień 2019
  • listopad 2019
  • październik 2019
  • wrzesień 2019
  • sierpień 2019
  • lipiec 2019
  • czerwiec 2019
  • maj 2019
  • kwiecień 2019
  • marzec 2019
  • styczeń 2019
  • grudzień 2018
  • listopad 2018
  • październik 2018
  • sierpień 2018
  • lipiec 2018
  • maj 2018
  • kwiecień 2018
  • marzec 2018
  • styczeń 2018
  • grudzień 2017
  • październik 2017
  • czerwiec 2017
  • kwiecień 2017
  • marzec 2017
  • luty 2017
  • styczeń 2017
  • grudzień 2016
  • listopad 2016
  • październik 2016
  • wrzesień 2016
  • sierpień 2016
  • lipiec 2016
  • czerwiec 2016
  • maj 2016
  • kwiecień 2016
  • marzec 2016
  • lipiec 2015
  • maj 2015
  • grudzień 2014
  • sierpień 2014
  • lipiec 2014
  • czerwiec 2014
  • kwiecień 2014