Typy błędów PHP i raportowanie
Poznaj komunikaty notice, warning i błędy fatalne oraz poziomy error_reporting
Typy błędów PHP i raportowanie to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.
Typy błędów PHP
PHP ma kilka poziomów ważności błędów:
- Notice — drobny problem, wykonywanie jest kontynuowane
- Warning — problem niekrytyczny, wykonywanie jest kontynuowane
- Fatal Error — wykonywanie zostaje natychmiast zatrzymane
- Parse Error — błąd składni, zatrzymanie przed rozpoczęciem wykonywania
- Deprecated — funkcja zostanie usunięta
error_reporting()
Za pomocą funkcji error_reporting() można określić, które błędy PHP mają być zgłaszane:
<?php
// Show all errors (development)
error_reporting(E_ALL);
// Hide notices and deprecated
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
// Production: no display, log to file
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', '1');
ini_set('error_log', '/var/log/php_errors.log');display_errors a log_errors
Najważniejsze ustawienia php.ini dotyczące obsługi błędów:
display_errors = On— wyświetlanie błędów w przeglądarce (tylko podczas programowania)display_errors = Off— ukrywanie błędów przed użytkownikami (środowisko produkcyjne)log_errors = On— zapisywanie błędów w pliku error_logerror_log = /path/to/file— określenie lokalizacji pliku dziennika
W środowisku produkcyjnym nigdy nie należy wyświetlać błędów użytkownikom!
Wywoływanie błędów za pomocą trigger_error
Własne błędy PHP można generować za pomocą trigger_error():
<?php
function divide(int $a, int $b): float {
if ($b === 0) {
trigger_error('Division by zero', E_USER_WARNING);
return 0.0;
}
return $a / $b;
}
echo divide(10, 0); // triggers E_USER_WARNINGNiestandardowa obsługa błędów
Własny moduł obsługi błędów można zarejestrować za pomocą set_error_handler():
<?php
set_error_handler(function(int $errno, string $errstr, string $file, int $line): bool {
$message = "[$errno] $errstr in $file:$line";
error_log($message);
if ($errno === E_USER_ERROR) {
http_response_code(500);
die('Internal error — please try again later');
}
return true; // don't execute PHP internal error handler
});
trigger_error('Custom error message', E_USER_ERROR);Typowe źródła błędów
Typowe przyczyny błędów PHP:
- Odwołanie do niezdefiniowanego klucza tablicy → Notice
- Wywołanie funkcji zwracającej false, a następnie użycie wyniku → Warning
- Wywołanie niezdefiniowanej funkcji → Fatal Error
- Brak średnika → Parse Error
- Dzielenie przez zero → Warning (zwraca INF lub NAN)
Operator wyciszania błędów @
Operator @ wycisza błędy pochodzące z pojedynczego wyrażenia — należy go unikać i stosować prawidłową obsługę błędów:
<?php
// Bad: hides errors silently
$result = @file_get_contents('missing.txt');
// Good: check explicitly
$result = file_get_contents('missing.txt');
if ($result === false) {
// handle the error
echo 'File not found';
}JIT w PHP 8 i zmiany w obsłudze błędów
PHP 8 zaostrzył niektóre zasady obsługi błędów:
- Wiele ostrzeżeń przekształcono w TypeError/ValueError
str_contains/starts_with/ends_withzastępują wyrażenia regularne w przypadku prostych sprawdzeń- Przekazanie argumentów niewłaściwego typu domyślnie powoduje zgłoszenie TypeError
ini_set w czasie działania
Ustawienia php.ini można nadpisać w czasie działania:
<?php
// Display errors during development
if (getenv('APP_ENV') === 'development') {
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
} else {
ini_set('display_errors', '0');
ini_set('log_errors', '1');
error_reporting(E_ALL);
}Sprawdzanie poziomu błędu
Poziomy błędów można wykrywać za pomocą bitowego AND:
<?php
$level = error_reporting();
if ($level & E_NOTICE) {
echo 'Notices are reported';
}
if ($level & E_WARNING) {
echo 'Warnings are reported';
}
// Check specific error types
echo (E_ALL & E_NOTICE) ? 'E_ALL includes E_NOTICE' : 'no';Dobre praktyki rejestrowania błędów
Dobre praktyki dotyczące rejestrowania błędów:
- Zawsze rejestruj błędy w środowisku produkcyjnym
- Uwzględniaj kontekst: identyfikator użytkownika, adres URL żądania, znacznik czasu
- Stosuj rejestrowanie strukturalne (JSON), aby ułatwić analizowanie danych
- Rotuj pliki dzienników, aby zapobiec zapełnieniu dysku
- Monitoruj dzienniki za pomocą narzędzi takich jak ELK, Datadog lub Papertrail
Szybki test
Jaki typ błędu PHP natychmiast zatrzymuje wykonywanie programu?
Podsumowanie: raportowanie błędów PHP
Najważniejsze informacje o obsłudze błędów:
- Typy błędów: Notice, Warning, Fatal, Parse, Deprecated
- Ustawiaj poziom za pomocą
error_reporting() - W środowisku produkcyjnym wyłącz wyświetlanie błędów i włącz ich rejestrowanie
- Rejestruj niestandardowy moduł obsługi za pomocą
set_error_handler() - Nigdy nie wyciszaj błędów za pomocą
@w kodzie produkcyjnym
Często zadawane pytania
Czy lekcja „Typy błędów PHP i raportowanie” jest bezpłatna?
Tak — pełny tekst „Typy błędów PHP i raportowanie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Typy błędów PHP i raportowanie”?
Poznaj komunikaty notice, warning i błędy fatalne oraz poziomy error_reporting Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć PHP Academy?
Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Typy błędów PHP i raportowanie”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?
Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Typy błędów PHP i raportowanie
- Try, catch i finally
- Tworzenie własnych wyjątków
- Rejestrowanie błędów i dobre praktyki