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... 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_WARNING | Ostrzeżenia w czasie wykonywania (błędy niekrytyczne) |
E_PARSE | Błędy podczas kompilacji |
E_NOTICE | Powiadomienia pojawiające się podczas wykonywania |
E_CORE_ERROR | Błędy krytyczne pojawiające się w czasie uruchamiania (inicjacji) |
E_CORE_WARNING | Błędy niekrytyczne pojawiające się w czasie uruchamiania (inicjacji) |
E_COMPILE_ERROR | Błędy krytyczne kompilacji |
E_COMPILE_WARNING | Ostrzeżenia podczas kompilacji |
E_USER_ERROR | Komunikat o błędzie generowany przez użytkownika |
E_USER_WARNING | Komunikat ostrzegawczy wygenerowany przez użytkownika |
E_USER_NOTICE | Komunikat powiadomienia wygenerowany przez użytkownika |
E_STRICT | Sugerowanie 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_DEPRECATED | Powiadomienie 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... 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... 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.
Bardzo fajnie przygotowana ściągawka, każdemu początkującemu w temacie na pewno się przyda