0Pricing
PHP Academy · Lekcja

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_log
  • error_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_WARNING

Niestandardowa 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_with zastę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

  1. Typy błędów PHP i raportowanie
  2. Try, catch i finally
  3. Tworzenie własnych wyjątków
  4. Rejestrowanie błędów i dobre praktyki
← Powrót do PHP Academy