Cztery rodzaje: błąd składni, ostrzeżenie, błąd krytyczny i wyjątek - czym się różnią
Jak czytać komunikat błędu? Typ, treść, plik, linia
error_reporting i display_errors - gdzie w XAMPP chowają się błędy
Ćwiczenie: naprawiamy plik z trzema różnymi błędami
Rozgrzewka · 3 minuty
Rozgrzewka: include, require
Czym różni się reakcja PHP na brakujący plik przy include a przy require?
Po co używamy require_once zamiast zwykłego require?
Dlaczego do connect-database.php lepiej pasuje require niż include?
Część 1 · Czytamy komunikat błędu
Anatomia komunikatu błędu
Za każdym razem, gdy PHP zgłasza błąd, mówi wam cztery rzeczy naraz: jaki to typ błędu, jaka jest jego treść (co dokładnie się nie udało), w którym pliku i w której linii kodu. Nauczcie się czytać te cztery elementy po kolei - to najszybsza droga do naprawy, szybsza niż zgadywanie.
Część 2 · Cztery rodzaje
Cztery rodzaje błędów w PHP
Rodzaj
Kiedy się pojawia
Co się dzieje ze stroną
Błąd składni (Parse error)
zanim PHP zacznie wykonywać kod - literówka, brak średnika
żadna linia kodu się nie wykonuje
Ostrzeżenie (Warning)
w trakcie działania, np. brak zmiennej
strona jedzie dalej
Błąd krytyczny (Fatal error)
w trakcie działania, np. brak funkcji
strona zatrzymuje się w tym miejscu
Wyjątek złapany w try...catch
błąd krytyczny, ale obsłużony wcześniej
strona jedzie dalej
PHP Manual: language.errors.basics.php („PHP reports errors in response to a number of internal error conditions... Every error that PHP generates includes a type.”)
Część 3 · Waga błędu
Od ostrzeżenia do błędu krytycznego
PHP wykrywa błąd składni, zanim uruchomi choćby jedną linię kodu - dlatego widzicie tylko jeden taki komunikat na raz. Ostrzeżenie i błąd krytyczny pojawiają się już w trakcie działania strony. Różnią się tym, czy PHP jedzie dalej, czy się zatrzymuje - a błąd krytyczny złapany w try...catch jednak pozwala jechać dalej.
Ta sama linia z części „Cztery rodzaje” już nie pokazuje ostrzeżenia, gdy na początku pliku dodacie error_reporting(0):
error_reporting(0);
echo"Cześć, " . $name . "!";
// result: "Cześć, !" - bez komunikatu Warning, zmienna nadal jest pusta
PHP Manual: errorfunc.configuration.php („display_errors ... This determines whether errors should be printed to the screen...”, „log_errors ... Tells whether script error messages should be logged...”), function.error-reporting.php
Część 5 · Łapiemy błąd
try...catch: łapiemy błąd
Niektóre błędy krytyczne w PHP to tak naprawdę wyjątki - obiekty, które można złapać, zanim zatrzymają całą stronę. Kod, który może się wysypać, otaczacie blokiem try { ... }. Jeśli PHP rzuci wyjątek pasującego typu, wykonanie przeskakuje do catch (Typ $e) { ... }, a reszta strony działa dalej.
Ciekawostka z PHP Manual: od PHP 7 większość dawnych błędów krytycznych PHP zgłasza jako obiekty klasy Error, a nie starym mechanizmem, który po prostu zatrzymywał skrypt. Dzięki temu można je złapać blokiem try...catch, tak jak w tym przykładzie DivisionByZeroError.
PHP Manual: language.exceptions.php („An exception can be thrown, and caught (\"caught\") within PHP. Code may be surrounded in a try block...”) · ciekawostka: PHP Manual, language.errors.php7.php („PHP 7 changes how most errors are reported by PHP... most errors are now reported by throwing Error exceptions”), php.net/manual/en/language.errors.php7.php
Egzamin INF.03
Tak pytają na egzaminie
1. W aplikacji PHP obsługującej bazę danych, aby po wykonaniu dowolnej operacji otrzymać numer błędu oraz jego opis, należy zastosować
tylko funkcję mysqli_error
funkcje mysqli_error i mysqli_errno
funkcje mysqli_error i mysqli_error_number
funkcje mysqli_error i mysqli_connect_errno
2. Błędy interpretacji kodu PHP są zapisywane
w logu pod warunkiem ustawienia odpowiedniego parametru w pliku php.ini
w podglądzie zdarzeń systemu Windows
w oknie edytora, w którym powstaje kod PHP
ignorowane przez przeglądarkę oraz interpreter kodu PHP
CKE, EE.09, styczeń 2022, zadanie 27 · CKE, E.14, styczeń 2016, zadanie 39 (bank pytań, przedmiot strony, temat php)
Ćwiczenie przy komputerze · 15 minut
Ćwiczenie: errors-to-fix.php
Utwórz w folderze swojego serwera plik errors-to-fix.php i przepisz do niego kod z ramki „Plik do naprawy” pod instrukcją.
Otwórz localhost/errors-to-fix.php w przeglądarce - zobaczysz pierwszy komunikat błędu.
Napraw ten jeden błąd, zapisz plik, odśwież stronę - pojawi się kolejny komunikat, innego typu.
Powtarzaj naprawę i odświeżanie, aż strona wypisze wynik bez żadnego komunikatu błędu.
Na końcu pliku, w komentarzu, zapisz krótko, jakie trzy błędy naprawiłeś i jakiego były typu.
W pliku są trzy błędy różnych typów: jeden błąd składni, jedno ostrzeżenie, jeden błąd krytyczny.