Czym są błędy PHP? Jak włączyć (i wyłączyć) wyświetlanie i logowanie (zapisywanie) błędów na stronie internetowej w PHP? Poradnik i instrukcja
Spis treściWyświetlanie błędów PHP pomoże Ci zorientować się, że z Twoim miejscem w sieci dzieje się coś niepokojącego. Dzięki temu szybko przeszukasz odpowiednie skrypty i zlokalizujesz źródło problemów. Naprawisz to, co uniemożliwiło stronie prawidłowe działanie.
Wyświetlanie błędów PHP i ich raportowanie jest bardzo przydatne w pracy osoby zarządzającej stroną WWW. Nawet najlepszemu twórcy zdarza się bowiem czasem popełnić błąd w trakcie pisania kodu. To wręcz normalne, szczególnie w przypadku bardziej skomplikowanych witryn, budowanych od podstaw. Najważniejsze jest natomiast szybkie zdiagnozowanie i poprawienie nieprawidłowego zapisu. Tu właśnie kluczową rolę odgrywają komunikaty i ostrzeżenia PHP.
Aby jednak przeglądanie błędów w ogóle było możliwe, najpierw konieczne jest uruchomienie ich raportowania. To właśnie dzięki tej opcji dowiesz się, kiedy po stronie serwera wystąpi błąd i gdzie znajduje się jego źródło. Jednocześnie natomiast musisz pilnować, by wada skryptu nie była widoczna na samej stronie internetowej. To bowiem może nie tylko wprawić w konsternację użytkownika, ale i sprowadzić na Ciebie poważne kłopoty.
Czym są błędy PHP?
PHP to skryptowy język programowania, powszechnie wykorzystywany do budowania stron internetowych. Cechuje się tym, że tworzony w nim kod następnie jest wykonywany w określonej kolejności. Gdy jednak system zauważy w nim niewłaściwy zapis, dojść może do wygenerowania błędu w pliku dziennika.
Dobrze skoordynowany proces raportowania błędów pozwala na zapisywanie tego typu sytuacji w jednym miejscu. Dzięki temu administrator czy twórca witryny może przeczytać każdy wygenerowany komunikat. Ostatecznie więc skrypt zostanie szybciej naprawiony, a strona WWW pozostanie dostępna dla użytkowników.
Istnieją różne typy błędów PHP. Mogą one dotyczyć rozmaitych aspektów funkcjonalności kodu. Bardzo często bywają wynikiem składni, przez którą interpreter nie jest w stanie określić intencji autora. W wielu przypadkach natomiast wyświetlane komunikaty wywołuje np.:
- zastosowanie nieprawidłowego polecenia,
- pominięcia średnika,
- wywołanie niewłaściwej zmiennej.
Często mowa tu o błahostkach, które nie prowadzą do poważnych kłopotów na serwerze. To tzw. błędy niekrytyczne. Może się jednak zdarzyć, że sprawa dotyczy naprawdę poważnego problemu. Skutkiem jego wystąpienia mogą być nawet błędy krytyczne, niejednokrotnie kończące się złożoną awarią. Właśnie dlatego generowanie i regularne przeglądanie plików z błędami PHP jest tak istotne.
Rodzaje wyświetlanych i raportowanych błędów PHP
W PHP istnieje wiele rodzajów raportowanych błędów. Poniżej najważniejsze z nich:
- E_ERROR: To jest błąd krytyczny w czasie wykonywania, który powoduje zatrzymanie skryptu. Przykłady takich błędów to błędy alokacji pamięci oraz większość błędów krytycznych, które nie są obsługiwane przez inne rodzaje błędów.
- E_WARNING: To jest błąd ostrzegawczy (niekrytyczny) w czasie wykonywania. Skrypt nie zostaje zatrzymany, ale może działać nieprawidłowo. Przykładem takiego błędu może być próba otwarcia nieistniejącego pliku.
- E_PARSE: Błąd generowany przez analizator składniowy. Występuje, gdy analizator napotyka problem z interpretacją kodu. Jest to błąd krytyczny, który zatrzymuje skrypt. Przykładem może być brakujący średnik lub nawias.
- E_NOTICE: Błąd informacyjny w czasie wykonywania. Jest to wskazówka dla programisty, że coś może działać nieprawidłowo, ale nie jest to krytyczne. Przykładem może być użycie niezdefiniowanej zmiennej.
- E_STRICT: Sugeruje zmiany w kodzie, które zapewnią lepszą kompatybilność w przyszłości.
- E_USER_ERROR: Błąd krytyczny generowany przez użytkownika za pomocą funkcji trigger_error().
- E_USER_WARNING: Ostrzeżenie generowane przez użytkownika za pomocą funkcji trigger_error().
- E_USER_NOTICE: Informacja generowana przez użytkownika za pomocą funkcji trigger_error().
- E_RECOVERABLE_ERROR: Błąd krytyczny, który można przechwycić. Jest to błąd, który normalnie zatrzymałby skrypt, ale dzięki blokowi catch można go obsłużyć i kontynuować działanie skryptu.
- E_DEPRECATED: Informuje o funkcjach, które są przestarzałe i zostaną usunięte w przyszłych wersjach PHP.
- E_USER_DEPRECATED: Informacja o funkcjach przestarzałych generowana przez użytkownika.
- E_ALL: Reprezentuje wszystkie błędy i ostrzeżenia.
Ta mała ściągawka może przydać Ci się dalej, gdy będziesz ustawiać wyświetlanie/logowanie (lub nie) konkretnych typów błędów.
Jak włączyć rejestrowanie błędów w pliku PHP?
Nie widzisz żadnych błędów w kodzie ani przy wyświetlaniu swojej strony internetowej? Być może stworzony przez Ciebie kod działa niezawodnie. Równie prawdopodobne jest jednak również to, że raportowanie błędów i ich wyświetlanie jest domyślnie wyłączone. W takim przypadku zalecane jest jak najszybsze uruchomienie tej opcji. W innym przypadku możesz nawet nie zdawać sobie sprawy z tego, że z Twoim serwisem dzieje się coś złego.
Raportowanie błędów PHP możesz uruchomić na dwa sposoby. Otwórz plik z kodem PHP, przejdź do jego edycji i dodaj jedno z dwóch rozwiązań:
1. następujący kod:
<?php
error_reporting(E_ALL);
?>
2. polecenie ini_set:
<?php
ini_set('error_reporting', E_ALL);
?>
Ten zabieg powinien pozwolić Ci na wyświetlanie wszystkich błędów PHP.
Jak włączyć raportowanie błędów PHP?
Mimo wprowadzenia powyższych kodów nadal nie widzisz żadnych informacji o błędach? W takim przypadku konieczne może być uruchomienie raportowania błędów. Musisz podjąć się zatem edycji plików:
Edycja pliku php.ini
Aby edytować plik php.ini, uruchom go w edytorze tekstu. Do wykonania tego możesz użyć też funkcji udostępnionej Ci przez Twojego hostingodawcę.
W pliku musisz znaleźć polecenie:
display_errors = Off
Następnie wystarczy wprowadzić korektę i zmienić wartość z „Off” na „On”.
Edycja pliku .htaccess
Krok drugi to edycja .htaccess. Jest to główny plik konfiguracyjny, przechowujący najważniejsze parametry i instrukcje, na podstawie których działa Twoja strona internetowa. Znajduje się on zapewne w katalogu głównym lub publicznym. Podobnie jak w przypadku php.ini, możesz edytować go z poziomu przeglądarki (za pośrednictwem panelu użytkownika) lub poprzez plik tekstowy.
Po otwarciu .htaccess znajdź fragment:
php_flag diplay_startup_errors off
php_flag display_errors off
Obie te wartości ponownie zamień z „off” na „on”. Następnie zapisz wprowadzone modyfikacje i zamknij plik. Jeśli nie znajdziesz tych wpisów, po prostu je dodaj do pliku.
Przed wprowadzaniem zmian w obu plikach wskazane jest wykonanie ich kopii zapasowych. To zabezpieczenie na wypadek wystąpienia jakichkolwiek kłopotów. Z ich pomocą łatwiej będzie przywrócić stronę do wersji sprzed zmian, jeśli nie wszystko pójdzie po Twojej myśli.
Polecenia dodatkowe
Jeśli chcesz, możesz wyświetlać tylko określone rodzaje komunikatów i błędów. Wystarczy tylko, że wprowadzisz je w odpowiednim kodzie. Może on wyglądać np. tak:
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
?>
W tym przypadku wyświetlane będą wyłącznie błędy analizy i krytyczne ostrzeżenia. Jest to natomiast lista, która zawiera wszelkie predefiniowane stałe dla typów błędów PHP. Możesz więc wprowadzić do niej inny parametr dotyczący ostrzeżenia, na którym szczególnie Ci zależy. Istotne jedynie, by był on oddzielony symbolem „|”.
Odpowiedni kod może działać również w odwrotną stronę. Chcesz, by raportowane było wszystko oprócz powiadomienia określonego typu? W takim przypadku skorzystaj z kodu:
<?php
error_reporting(E_ALL & ~E_PARSE)
?>
W ten sposób zezwolisz na wyświetlanie wszystkich błędów z wyjątkiem błędów analizy.
Jak wyłączyć raportowanie błędów PHP?
Chcesz wstrzymać proces raportowania błędów? Można go wyłączyć jednym poleceniem. Wystarczy tylko, że zmienisz wartość kodu na „0″:
<?php
error_reporting(0)
?>
Lub zmienisz z powrotem wartości w pliku php.ini lub .htacces na off, zgodnie z tym, co zostało opisane wcześniej.
Jak włączyć logowanie błędów do pliku?
Dzienniki błędów są bardzo pomocne, jeśli regularnie optymalizujesz swoje miejsce w sieci. Ułatwiają systematyczne diagnozowanie witryny i szybsze przystępowanie do wprowadzania ewentualnych poprawek. W ten sposób strona WWW może być bezustannie dostępna dla użytkowników. W praktyce taktyka ta sprawia, że wszelkie błędy są zapisywane w jednym pliku na serwerze. Możesz więc uzyskać do nich dostęp w dowolnym momencie.
Utworzenie tego typu pliku wymaga edycji pliku php.ini (lub jego stworzenia, jeśli taki nie istnieje). Musisz w nim umieścić fragment kodu, opisujący szczegóły procesu zapisywania błędów PHP.
Umieść w pliku kod:
log_errors = On
error_log = /bledy.log
error_reporting = E_ALL & ~E_NOTICE
Wyjaśnienie jego poszczególnych elementów:
- log_errors = On – to zgoda na logowanie (czyli zapisywanie) błędów w pliku;
- error_log = /bledy.log – wskazuje na plik, w którym mają być zapisywane błędy. Powinien mieć ustawione prawa do zapisu;
- error_reporting = E_ALL & ~E_NOTICE – informacja określająca, jakie błędy będą zapisywane w wyżej wspomnianym pliku.
Gdy tylko wystąpi jakikolwiek błąd PHP, informacja o nim pojawi się we wskazanym wyżej pliku. Zalecane jest wobec tego regularne kontrolowanie jego zawartości. Zrobisz to za pomocą oprogramowania hostingowego lub pobierając plik na swój komputer. Otworzysz go przy użyciu zwykłego edytora tekstowego.
Jest jeszcze jedna metoda, której możesz użyć. Dotyczy ona edycji plików:
- httpd.conf,
lub
- apache2.conf.
Nie działa ona jednak w przypadku korzystania z hostingu współdzielonego. W jego przypadku dostęp do serwera ma bowiem tylko administrator.
Dziennik błędów PHP najczęściej znajduje się w jednym z katalogów:
- /var/log/httpd/,
- /var/log/apache2/.
W jaki sposób możesz włączyć rejestrowanie błędów PHP? Musisz edytować plik, dodając następującą linijkę:
ErrorLog "/var/log/apache2/website-name-error.log"
Czytaj: Jak sprawdzić logi serwera i strony WWW? Jak analizować?
Jak włączyć wyświetlanie błędów PHP na stronie internetowej?
Możesz trafić na sytuację, gdy niezbędna będzie praca bezpośrednio na serwerze w internecie. To na nim konieczne będzie testowanie skryptów. Przy odpowiednich zabezpieczeniach żadne komunikaty jednak nie będą widoczne, mimo że coś ewidentnie nie będzie działało poprawnie. W takiej sytuacji niezbędne może być ręczne włączenie wyświetlania błędów PHP na stronie. Aby to zrobić, na początku pliku musisz dodać formułę:
<?PHP
ini_set( 'display_errors', 'On' );
error_reporting( E_ALL );
?>
Pamiętaj jednak, by była ona aktywna w kodzie wyłącznie wtedy, gdy Ty tego potrzebujesz. Jej pozostawienie sprawi bowiem, że błąd będzie wyświetlał się wszystkim użytkownikom, który otworzą dane miejsce w sieci. To natomiast może generować dwa problemy:
- prezentuje Cię w niekorzystnym świetle – Twoi odbiorcy widzą, że ze stroną WWW coś się dzieje. Ci, którzy się nie znają, niepotrzebnie się zaniepokoją. Z kolei osoby znające się na programowaniu mogą zacząć Cię oceniać. Obie sytuacje działają natomiast na Twoją niekorzyść;
- negatywnie wpływa na kwestie bezpieczeństwa – pokazuje odbiorcom, w jaki sposób wykorzystywane są ich dane. Szczegóły występujących na stronie błędów mogą ponadto zostać wykorzystane w celach niezgodnych z interesami Twojej firmy.
Jak wyłączyć wyświetlanie błędów PHP na stronie internetowej?
Wyświetlanie błędów PHP jest przez Ciebie w pełni kontrolowane przy użyciu pliku konfiguracyjnego i skryptu. Nic więc nie stoi na przeszkodzie, by wyłączyć tę opcję dla strony internetowej. Aby to zrobić, otwórz plik php.ini i wprowadź komendę:
display_errors = Off
log_errors = On
error_log = /home/httpd/www/logs/bledyphp.txt
Trzecia linijka umożliwia włączenie zapisywania błędów do pliku, zamiast na stronie. Jest to sytuacja, którą omawialiśmy już powyżej.
Jak włączyć i wyłączyć wyświetlanie błędów PHP za pomocą konta hostingowego?
Tworzenie własnej strony internetowej bywa stresujące. Dotyczy to nie tylko osób dysponujących własnym serwerem, ale też tych korzystających z usług hostingodawców. Nawet ich wsparcie zresztą nie stanowi ochrony przed popełnieniem błędów w kodzie PHP.
Co jednak zrobić, gdy coś nie działa poprawnie, błędów PHP na stronie nie widać, a nie chcesz „grzebać” w kodzie? W takim przypadku z pomocą przychodzą Ci panele administracyjne cPanel lub DirectAdmin.
Ich wygląd i dostępne opcje zależne są od konkretnego hostingodawcy. W większości przypadków natomiast udostępniają one opcję włączenia wyświetlania błędów PHP. Poniżej stworzyliśmy instrukcję, jak to prawidłowo wykonać. Nazewnictwo poszczególnych sekcji czy zakładek może się jednak nieco różnić. W swoich przykładach bazowaliśmy na oficjalnych wersjach demonstracyjnych obu serwisów.
Włączanie i wyłączanie wyświetlania błędów PHP w DirectAdmin
Zaloguj się do panelu DitectAdmin. Login oraz hasło powinny zostać Ci udostępnione przez usługodawcę zaraz po opłaceniu pakietu hostingowego. Następnie przejdź do zakładki pozwalającej na zarządzanie zaawansowanymi ustawieniami PHP. W przypadku wersji demo, na której bazujemy, jest to wariant „Ustawienia PHP”.
Rozwijając listę przy „Parametrze” zobaczysz różne warianty ustawień. Wśród nich szczególnie istotne są w tym przypadku:
- display_errors – wyświetlanie błędów,
- error_reporting – raportowanie błędów,
- log_errors – logowanie (zapisywanie) błędów.
„Wartość” wszystkich trzech ustaw na „Włączone”. Każdą zmianę potwierdzaj zielonym przyciskiem „Dodaj„. Wskaż też plik, do którego raportowane błędy mają być zapisywane. Pamiętaj natomiast, że zmiana ta dotyczy tylko tej domeny, która jest podłączona do danego konta DirectAdmin.
Włączanie i wyłączanie wyświetlania błędów PHP w cPanel
Domyślnie błędy PHP w cPanel nie są wyświetlane ze względów bezpieczeństwa. Jeśli jednak masz taką potrzebę, możesz to ograniczenie czasowo wyłączyć. Cały proces przebiega w sposób zbliżony do omawianego wyżej.
Ponownie pierwszym krokiem jest przejście logowania do swojego konta użytkownika w cPanel. Następnie musisz odnaleźć sekcję odpowiadającą za ustawienia związane z PHP. W naszym przypadku (wersja demonstracyjna) jest to „Software”.
Naciśnij przycisk „Edytora INI MultiPHP”. W naszym przypadku to ten z napisem „Editor INI de MultiPHP”. Na Twoim ekranie Powinny pojawić się dwie zakładki. Wybierz tryb edytora. U nas oznaczony jest jako „Modo editor”. Następnie rozwiń widoczną tam listę i wybierz domenę, dla której chcesz edytować ustawienia PHP.
W tym momencie powinno otworzyć się okno edytora. Może ono zawierać elementy kodu lub być całkowicie puste. Musisz zatem dodać lub edytować w tym miejscu następujące wiersze:
display_errors = On
error_reporting = E_ALL
W ten sposób wyświetlisz wszystkie ostrzeżenia, powiadomienia i błędy PHP dotyczące wybranej domeny i jej subdomen. Aby zatwierdzić zmiany, naciśnij przycisk „Zapisz”. Od tej chwili wszelkie komunikaty będą wyświetlane na ekranie. Co więcej, realizowany będzie również ich zapis, domyślnie w głównym katalogu w pliku „error_log”.
Czytaj też: Tryb debugowania w WordPress w praktyce