Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu: Skills Rozpocznij
Sekcja
Administracja Serwery Wirtualne

Jak włączyć raportowanie błędów PHP: Kompletny przewodnik dla programistów

Efektywne debugowanie aplikacji PHP może oznaczać różnicę między godzinami frustracji a szybką, czystą naprawą. Niezależnie od tego, czy budujesz nową aplikację internetową, czy utrzymujesz istniejącą, wiedza na temat włączania i konfigurowania raportowania błędów PHP jest umiejętnością podstawową, którą musi posiadać każdy programista. Ten kompleksowy przewodnik obejmuje każdą dostępną metodę — od szybkich poprawek w skrypcie po konfigurację na poziomie serwera — i wyjaśnia, jak bezpiecznie obsługiwać raportowanie błędów zarówno w środowiskach programistycznych, jak i produkcyjnych.

Co to jest raportowanie błędów PHP i dlaczego to ważne?

Raportowanie błędów PHP to wbudowana funkcja, która kontroluje, które typy błędów, ostrzeżeń i powiadomień PHP wyświetla podczas wykonywania skryptu. Gdy jest prawidłowo skonfigurowana, daje ci natychmiastową, praktyczną informację zwrotną na temat problemów w twoim kodzie — w tym błędy składni, niezdefiniowane zmienne, przestarzałe funkcje, wyjątki czasu wykonywania i nieudane zapytania do bazy danych.

Domyślnie wiele konfiguracji serwera całkowicie tłumi dane wyjściowe błędów, szczególnie w środowiskach produkcyjnych. Jest to celowe: wyświetlanie surowych komunikatów o błędach użytkownikom końcowym może ujawnić poufne informacje, takie jak ścieżki plików, poświadczenia bazy danych i wewnętrzna logika aplikacji. Jednak podczas tworzenia, tłumienie błędów sprawia, że debugowanie jest niepotrzebnie trudne.

Zrozumienie, jak włączać i wyłączać raportowanie błędów — i gdzie je konfigurować — jest niezbędne dla każdego programisty pracującego z PHP w środowisku VPS Hosting lub na serwerze współdzielonym.

Poziomy błędów PHP w skrócie

PHP kategoryzuje błędy na odrębne poziomy, z których każdy jest kontrolowany niezależnie:

StałaOpis
E_ERRORFatalne błędy czasu wykonywania, które zatrzymują wykonywanie skryptu
E_WARNINGNiekrytyczne ostrzeżenia czasu wykonywania
E_NOTICEDrobne powiadomienia o potencjalnych problemach w kodzie
E_DEPRECATEDOstrzeżenia dotyczące funkcji, które zostaną usunięte w przyszłych wersjach PHP
E_PARSEBłędy parsowania czasu kompilacji
E_ALLWszystkie błędy, ostrzeżenia i powiadomienia połączone

Używanie E_ALL podczas tworzenia zapewnia, że wychwycisz każdy możliwy problem, zanim dotrze do produkcji.

Metoda 1: Włączenie raportowania błędów PHP bezpośrednio w skrypcie

Najszybszy sposób włączenia raportowania błędów to dodanie dwóch linii na samym początku pliku PHP, przed jakimkolwiek innym wyjściem. To podejście jest idealne do szybkiego debugowania konkretnego skryptu bez modyfikowania plików konfiguracyjnych na poziomie serwera.

<?php
error_reporting(E_ALL);          // Report all types of errors
ini_set('display_errors', 1);    // Display errors directly in the browser
ini_set('display_startup_errors', 1); // Also show errors during PHP startup
?>

Co robi każda linia

  • error_reporting(E_ALL) — Ustawia poziom raportowania błędów na przechwytywanie każdej kategorii błędu, w tym powiadomień, ostrzeżeń, alertów deprecacji i błędów krytycznych. Możesz również łączyć określone stałe za pomocą operatorów bitowych, na przykład E_ALL & ~E_NOTICE aby wykluczyć powiadomienia.
  • ini_set('display_errors', 1) — Instruuje PHP do wyświetlania komunikatów o błędach bezpośrednio w przeglądarce lub wierszu poleceń. Ustawienie tego na 0 ukrywa błędy z wyjścia bez wyłączania ich rejestrowania.
  • ini_set('display_startup_errors', 1) — Włącza raportowanie błędów, które występują podczas sekwencji uruchamiania PHP, które display_errors samodzielnie nie obejmuje.

> Ważne: Zawsze umieszczaj te linie na samym początku skryptu. Jeśli błąd analizy krytycznej występuje przed osiągnięciem tych linii, nie będą one miały żadnego efektu. W przypadku błędów analizy musisz zamiast tego skonfigurować raportowanie błędów na poziomie php.ini.

Kiedy używać tej metody

Ta metoda najlepiej sprawdza się w:

  • Debugowaniu pojedynczego skryptu lub modułu szybko
  • Środowiskach hostingu współdzielonego, gdzie nie masz dostępu do php.ini
  • Tymczasowych sesjach debugowania podczas aktywnego rozwoju

Metoda 2: Włączenie raportowania błędów PHP za pośrednictwem php.ini (Rekomendowane)

Aby uzyskać trwałą konfigurację na poziomie serwera, modyfikacja pliku php.ini jest najbardziej niezawodnym podejściem. Zmiany wprowadzone tutaj mają zastosowanie globalnie do wszystkich skryptów PHP działających na serwerze, co czyni to preferowaną metodą dla dedykowanych środowisk programistycznych.

Krok 1: Zlokalizuj plik php.ini

Lokalizacja php.ini zależy od systemu operacyjnego, wersji PHP i serwera WWW. Najłatwiej znaleźć go, tworząc tymczasowy plik PHP zawierający następujące:

<?php
phpinfo();
?>

Prześlij ten plik na serwer, otwórz go w przeglądarce i wyszukaj wpis "Loaded Configuration File". Wyświetli on dokładną ścieżkę do aktywnego pliku php.ini.

Typowe domyślne lokalizacje to:

  • Linux (Apache): /etc/php/8.x/apache2/php.ini
  • Linux (CLI): /etc/php/8.x/cli/php.ini
  • Linux (Nginx + PHP-FPM): /etc/php/8.x/fpm/php.ini
  • Windows (XAMPP): C:xamppphpphp.ini
  • macOS (MAMP): /Applications/MAMP/conf/php/php.ini

> Przypomnienie o bezpieczeństwie: Usuń lub ogranicz dostęp do pliku phpinfo() natychmiast po użyciu. Ujawnia on szczegółowe dane konfiguracji serwera, które mogą być wykorzystane.

Krok 2: Edytuj plik php.ini

Otwórz plik php.ini za pomocą edytora tekstu lub SSH na serwerze:

sudo nano /etc/php/8.x/apache2/php.ini

Zlokalizuj następujące dyrektywy i zaktualizuj je jak pokazano:

Przed (typowe domyślne ustawienia produkcyjne):

display_errors = Off
display_startup_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
log_errors = On

Po (konfiguracja programistyczna):

display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php/error.log

Krok 3: Uruchom ponownie serwer WWW

Po zapisaniu zmian uruchom ponownie serwer WWW, aby zastosować nową konfigurację:

Dla Apache:

sudo systemctl restart apache2

Dla Nginx z PHP-FPM:

sudo systemctl restart php8.x-fpm
sudo systemctl restart nginx

Dla XAMPP na Windows:

Otwórz Panel sterowania XAMPP i kliknij Stop, a następnie Start obok Apache.

Metoda 3: Włączanie raportowania błędów za pośrednictwem .htaccess (tylko Apache)

Jeśli korzystasz ze środowiska hostingu współdzielonego bez bezpośredniego dostępu do php.ini, a Twój serwer korzysta z Apache, możesz zastąpić ustawienia PHP za pomocą pliku .htaccess umieszczonego w katalogu głównym Twojej witryny.

php_flag display_errors On
php_flag display_startup_errors On
php_value error_reporting 32767
php_flag log_errors On
php_value error_log /home/yourusername/logs/php_errors.log

Wartość numeryczna 32767 odpowiada E_ALL w PHP. Ta metoda jest szczególnie przydatna w planach Hostingu Web Współdzielonego, gdzie dostęp do konfiguracji na poziomie serwera jest ograniczony.

> Uwaga: Ta metoda działa tylko wtedy, gdy host umożliwia zastępowanie dyrektyw PHP za pośrednictwem .htaccess. Niektórzy hostingodawcy wyłączają to ze względów bezpieczeństwa.

Metoda 4: Konfiguracja raportowania błędów w lokalnych środowiskach programistycznych

Jeśli uruchamiasz lokalny stos programistyczny, taki jak XAMPP, MAMP lub WAMP, proces jest prosty.

XAMPP (Windows / Linux / macOS)

  1. Otwórz Panel sterowania XAMPP
  2. Kliknij Config obok Apache
  3. Wybierz PHP (php.ini) z listy rozwijanej
  4. Zastosuj ustawienia programistyczne opisane w Metodzie 2
  5. Uruchom ponownie Apache z Panelu sterowania

MAMP (macOS)

  1. Otwórz Preferencje MAMP
  2. Przejdź do karty PHP
  3. Kliknij przycisk php.ini, aby otworzyć plik konfiguracyjny
  4. Zastosuj ustawienia programistyczne i zapisz
  5. Uruchom ponownie serwery MAMP

Środowiska oparte na Docker

Jeśli używasz Docker do lokalnego programowania, możesz przekazać wartości konfiguracji PHP bezpośrednio za pośrednictwem zmiennych środowiskowych lub zainstalować niestandardowy plik php.ini:

RUN echo "display_errors = On" >> /usr/local/etc/php/conf.d/custom.ini
RUN echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/custom.ini

Testowanie konfiguracji raportowania błędów

Po włączeniu raportowania błędów przy użyciu dowolnej z powyższych metod, sprawdź, czy działa prawidłowo, celowo wprowadzając błąd do skryptu testowego:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Intentional error: undefined variable
echo $undefinedVariable;

// Intentional warning: wrong argument count
strlen();

// Intentional notice: undefined array key
$array = [];
echo $array['missing_key'];
?>

Jeśli raportowanie błędów jest skonfigurowane prawidłowo, PHP wyświetli powiadomienia i ostrzeżenia dla każdego z tych problemów. Powinieneś zobaczyć dane wyjściowe podobne do:

Notice: Undefined variable: undefinedVariable in /var/www/html/test.php on line 5
Warning: strlen() expects exactly 1 argument, 0 given in /var/www/html/test.php on line 8
Notice: Undefined index: missing_key in /var/www/html/test.php on line 12

Wyłączanie wyświetlania błędów i rejestrowanie błędów w produkcji

Gdy aplikacja jest gotowa do wdrożenia, nigdy nie musisz wyświetlać komunikatów o błędach użytkownikom końcowym. Ujawnione błędy mogą ujawnić:

  • Bezwzględne ścieżki plików na serwerze
  • Nazwy tabel bazy danych i struktury zapytań
  • Szczegóły wersji PHP i rozszerzeń
  • Logikę aplikacji i dane konfiguracyjne

Te informacje stanowią znaczące zagrożenie bezpieczeństwa i mogą być wykorzystane przez złośliwych aktorów. Zamiast tego skonfiguruj PHP do rejestrowania błędów w pliku bez wyświetlania ich.

Rekomendowane ustawienia php.ini dla produkcji

display_errors = Off
display_startup_errors = Off
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php/production_errors.log

Zwróć uwagę, że error_reporting pozostaje ustawione na E_ALL nawet w produkcji. Zapewnia to, że wszystkie błędy są przechwytywane w pliku dziennika do przeglądu, bez ujawniania ich odwiedzającym.

Tworzenie i zabezpieczanie pliku dziennika błędów

# Create the log directory
sudo mkdir -p /var/log/php

# Create the log file
sudo touch /var/log/php/production_errors.log

# Set appropriate ownership
sudo chown www-data:www-data /var/log/php/production_errors.log

# Restrict permissions
sudo chmod 640 /var/log/php/production_errors.log

Monitorowanie dzienników błędów

Możesz monitorować dziennik błędów PHP w czasie rzeczywistym za pomocą polecenia tail:

tail -f /var/log/php/production_errors.log

Jest to szczególnie przydatne na Serwerze Dedykowanym, gdzie masz pełny dostęp root i możesz skonfigurować rotację dzienników, alerty i narzędzia monitorowania, takie jak Logwatch lub Fail2Ban.

Raportowanie błędów PHP: Podsumowanie ustawień Development vs. Production

UstawienieDevelopmentProduction
display_errorsOnOff
display_startup_errorsOnOff
error_reportingE_ALLE_ALL
log_errorsOnOn
error_logOpcjonalneWymagane

Advanced: Custom Error Handlers

W przypadku bardziej zaawansowanych aplikacji PHP pozwala na zdefiniowanie niestandardowej funkcji obsługi błędów za pomocą set_error_handler(). Daje to pełną kontrolę nad sposobem przetwarzania, formatowania i przechowywania błędów.

<?php
function customErrorHandler(int $errno, string $errstr, string $errfile, int $errline): bool {
    $timestamp = date('Y-m-d H:i:s');
    $message = "[$timestamp] Error $errno: $errstr in $errfile on line $errline" . PHP_EOL;

    // Log to a custom file
    error_log($message, 3, '/var/log/php/custom_errors.log');

    // Optionally display a friendly message to users in production
    if (ini_get('display_errors')) {
        echo "<pre>$message</pre>";
    }

    return true; // Prevent PHP's default error handler from running
}

set_error_handler('customErrorHandler');
?>

Niestandardowe procedury obsługi błędów są szczególnie cenne podczas tworzenia aplikacji wymagających strukturalnego rejestrowania, integracji z usługami monitorowania, takimi jak Sentry lub Datadog, lub przyjaznych dla użytkownika stron błędów.

Wybór odpowiedniego środowiska hostingowego do tworzenia aplikacji PHP

Twoje środowisko hostingowe odgrywa kluczową rolę w tym, jak efektywnie możesz konfigurować i zarządzać raportowaniem błędów PHP. Oto krótki przegląd tego, co oferuje każde środowisko:

  • Hosting współdzielony — Ograniczony dostęp do php.ini; polegaj na .htaccess lub konfiguracji w skrypcie. Najlepszy dla małych projektów.
  • Hosting VPS — Pełny dostęp root, pełna kontrola nad php.ini, pulami PHP-FPM i konfiguracją serwera. Idealny do profesjonalnego tworzenia aplikacji PHP.
  • VPS z cPanel — Łączy kontrolę na poziomie root z wygodą graficznego interfejsu do zarządzania wersjami PHP i ustawieniami dla każdej domeny.
  • Serwery dedykowane — Maksymalna wydajność i izolacja; najlepsze dla aplikacji PHP o wysokim ruchu z złożonymi wymaganiami dotyczącymi logowania i monitorowania.

Jeśli poważnie podchodzisz do tworzenia aplikacji PHP i potrzebujesz stabilnego, konfigurowalnego środowiska z pełną kontrolą nad stosem serwera, VPS lub serwer dedykowany to właściwy wybór.

Często Zadawane Pytania

Dlaczego moje błędy PHP nie są wyświetlane nawet po włączeniu raportowania błędów w moim skrypcie?

Jest to zwykle spowodowane dyrektywą php.ini zastępującą ustawienia w skrypcie lub błędem parsowania występującym przed osiągnięciem wywołania error_reporting(). Sprawdź ustawienia php.ini i rozważ włączenie raportowania błędów na poziomie serwera.

Czy mogę włączyć raportowanie błędów tylko dla jednego katalogu?

Tak. Umieść plik .htaccess z dyrektywami błędów PHP w określonym katalogu lub użyj pliku php.ini dla każdego katalogu, jeśli Twój serwer to obsługuje.

Czy włączenie raportowania błędów spowalnia moją aplikację?

Nieznacznie. Wpływ na wydajność samego raportowania błędów jest minimalny. Jednak pisanie do plików dziennika przy każdym żądaniu może dodać niewielkie obciążenie I/O w środowiskach o dużym ruchu.

Jaka jest różnica między display_errors i log_errors?

display_errors wysyła dane wyjściowe błędu do przeglądarki lub wiersza poleceń. log_errors zapisuje błędy do pliku. W produkcji zawsze używaj log_errors = On z display_errors = Off.

Podsumowanie

Włączenie raportowania błędów PHP to jeden z najważniejszych kroków, które możesz podjąć, aby ulepszyć swój przepływ pracy programistycznej. Przekształca on ciche, niewidoczne błędy w jasne, praktyczne wiadomości, które wskazują bezpośrednio na źródło problemu — oszczędzając godziny domysłów i czasu debugowania.

Kluczowe wnioski z tego przewodnika to:

  1. Użyj error_reporting(E_ALL) i ini_set('display_errors', 1) do szybkiego debugowania dla każdego skryptu
  2. Zmodyfikuj php.ini dla trwałego, ogólnoserwisowego raportowania błędów w środowiskach programistycznych
  3. Użyj .htaccess gdy nie masz bezpośredniego dostępu do php.ini na hostingu współdzielonym
  4. Zawsze wyłącz display_errors w produkcji i przekieruj wyjście błędów do bezpiecznego pliku dziennika
  5. Rozważ niestandardowy program obsługi błędów do zaawansowanego logowania, monitorowania i przyjaznych dla użytkownika stron błędów

Wybór odpowiedniego środowiska hostingowego również ma znaczenie. Niezależnie od tego, czy wybierzesz Hosting Współdzielony dla prostego projektu, czy w pełni zarządzany plan Hosting VPS dla profesjonalnej aplikacji PHP, posiadanie odpowiedniego poziomu dostępu do serwera zapewnia, że możesz skonfigurować raportowanie błędów dokładnie w taki sposób, jaki wymaga Twój projekt.

Opanowując raportowanie błędów PHP — i wiedząc, kiedy je włączyć lub wyciszyć — budujesz bardziej niezawodne, bezpieczne i łatwe w utrzymaniu aplikacje od podstaw.