Inne działy

 

 

PHP Obsługa błędów

 

Obsługa błędów domyślnie w PHP jest bardzo prosta. Komunikat błędu z nazwą pliku, numer linii i komunikat opisujący błąd jest wysyłany do przeglądarki.


Podczas tworzenia skryptów i aplikacji internetowych, obsługa błędów jest ważną częścią. Jeśli Twój kod nie obsluguje sprawdzania błędnego kodu, twój program może wyglądać bardzo nieprofesjonalne i może być otwarty na zagrożenia bezpieczeństwa.

Ten poradnik zawiera niektóre z najczęstszych błędów i metody ich sprawdzania w PHP.

Pokażemy różne metody obsługi błędów:

  • Wyrażenie die()
  • Własne błędy i błędy wyzwalaczy
  • Raportowanie błędów
Podstawowa obsługa błędów: Korzystanie z funkcji die()

Pierwszy przykład pokazuje prosty skrypt, który otwiera plik tekstowy:

 

<?php
$file=fopen("dane.txt","r");
?>

 

 Jeśli plik nie istnieje, może pojawi się błąd jak poniżej:

Warning: fopen(dane.txt) [function.fopen]: failed to open stream: No such 
file or directory in D:\xampp\xampp\htdocs\php\poczatek.php on line 2

 

Aby uniemożliwić użytkownikowi otrzymywanie wiadomości, jak powyżej, należy sprawdzić, czy plik istnieje, zanim spróbujemy uzyskać do niego dostęp:

<?php
if(!file_exists("dane.txt"))
{
die("Plik nie istnieje");
}
else
{
$file=fopen("dane.txt","r");
}
?>

 

 Teraz, jeśli plik nie istnieje, pojawi się błąd jak poniżej:

Plik nie istnieje

 

 Powyższy kod jest bardziej wydajny niż wcześniejszy kod, ponieważ wykorzystuje prosty mechanizm obsługi błędów, aby zatrzymać skrypt po błędzie.

Jednakże, działanie aby po prostu zatrzymać skrypt nie zawsze jest to właściwe działanie. Rzućmy okiem na alternatywne funkcje PHP do obsługi błędów.

 

Tworzenie niestandardowej obsługi błędów

 

Tworzenie niestandardowej obsługi błędów jest dość proste. Po prostu należy stworzyć specjalną funkcję, która może być wywołana, gdy wystąpi błąd w PHP.

Funkcja ta musi być w stanie obsłużyć co najmniej dwa parametry (poziom błędu oraz komunikat o błędzie), ale można przyjąć do pięciu parametrów (opcjonalnie: plik, numer-linii, kontekst błędu):

Składnia

error_function(error_level,error_message, error_file,error_line,error_context)

 

ParametrOpis
error_level Wymagane. Określa poziom raportu o błędzie dla błędu użytkownika. Musi być liczbą. Patrz tabela poniżej dla możliwych poziomów zgłaszania błędów.
error_message Wymagane. Określa komunikat o błędzie zdefiniowanym przez użytkownika
error_file Opcjonalne. Określa nazwę pliku, w którym wystąpił błąd
ERROR_LINE Opcjonalne. Określa numer wiersza, w którym wystąpił błąd
error_context Opcjonalne. Określa tablicę zawierającą wszystkie zmienne i ich wartości, w użyciu, gdy wystąpił błąd

 

 Poziomy raportowania błędów

 

WartośćStałaOpis
2 E_WARNING Niekrytyczny błąd czasu. Wykonanie skryptu nie zostanie zatrzymane
8 E_NOTICE Run-time anonse. Skrypt znalazłem coś, co może być błędem, ale może się zdarzyć, gdy skrypt jest uruchomiony normalnie
256 E_USER_ERROR Fatal error generowane przez użytkowników. To jest jak zestaw E_ERROR zastosowany przez programistę za pomocą funkcji PHP trigger_error()
512 E_USER_WARNING Ostrzeżenie generowane przez użytkowników. To jest jak E_WARNING ustalonym przez programistę za pomocą funkcji PHP trigger_error()
1024 E_USER_NOTICE Użytkownik generuje zawiadomienie. To jest jak E_NOTICE ustalonym przez programistę za pomocą funkcji PHP trigger_error()
4096 E_RECOVERABLE_ERROR Błąd krytyczny. To jest jak E_ERROR ale może zostać przechwycony przez użytkownika zdefiniowane w uchwycie (patrz także set_error_handler())
8191 E_ALL Wszystkie błędy i ostrzeżenia (E_STRICT stał się częścią E_ALL w PHP 5.4)

 

 Teraz można utworzyć funkcję obsługi błędów:

function bladUzytkownika($errno, $errstr)
{
echo "<b>Błąd:</b> [$errno] $errstr<br>";
echo "Koniec skryptu";
die();
}

 

Powyższy kod jest prostą funkcją obsługi błędów. Gdy zostanie uruchomiony, to wyświetli się poziom błędu oraz komunikat o błędzie. Następnie wyświetla poziom
błędu i komunikat i kończy działanie skryptu.

Teraz, gdy udało nam się stworzyć funkcję obsługi błędów, musimy zdecydować, kiedy powinna ona zostać uruchomiona.

Ustaw Error Handler

Obsługa błędów domyślnie dla PHP jest wbudowana. Mamy zamiar zrobić funkcję obsługi błędów jak powyżej w czasie trwania skryptu.

Jest to możliwe, aby zmienić zastosowanie obsługi błędów tylko dla niektórych błędów, w ten sposób skrypt może obsługiwać różne błędy w różne sposoby.

Jednakże, w tym przypadku będziemy korzystać z naszej niestandardowej obsługi błędów dla wszystkich błędów:

 

set_error_handler("bladUzytkownika");

Ponieważ chcemy, aby naszą niestandardową funkcję do obsługi wszystkich błędów, set_error_handler() obsługiwał tylko jeden parametr, drugi parametr może
zostać dodany do określenia poziomu błędu.

Przykład

Testowanie obsługi błędów próbując uzyskać wyjście zmiennej, która nie istnieje:

<?php
//funkcja obsługi błędów
function bladUzytkownika($errno, $errstr)
{
echo "<b>Błąd:</b> [$errno] $errstr";
}

//ustawienie obsługi błędów
set_error_handler("bladUzytkownika");

//wyzwalanie błędu
echo($test);
?>

 

 Użycie powyższego kodu powinno wyświtlić wynik jak poniżej:

Błąd: [8] Undefined variable: test

Wywołanie błędu

W skrypcie, w których użytkownicy mogą wprowadzać dane warto wywołać błędy podczas testowania programu. W PHP można to zrobić za pomocą funkcji trigger_error().

Przykład

W tym przykładzie błąd występuje, jeśli zmienna "test" jest większa niż "1":

<?php
$test=2;
if ($test>1)
{
trigger_error("Wartość musi być 1 lub poniżej");
}
?>

 

Użycie powyższego kodu powinno wyświetlić następujący wynik:

Notice: Wartość musi być 1 lub poniżej in D:\xampp\xampp\htdocs\php\poczatek.php on line 5

Błąd może być wywołany gdziekolwiek chcesz w skrypcie, a poprzez dodanie drugiego parametru, można określić, jaki poziom błędu jest wyzwalany.

Możliwe typy błędów:

E_USER_ERROR - Błąd typu Fatal generowane przez użytkowników podczas uruchamiania. Błędy, które nie mogą być odzyskane. Wykonanie skryptu zostanie wstrzymane
E_USER_WARNING - Non-fatal generowane przez użytkowników ostrzeżenie. Wykonanie skryptu nie zostanie zatrzymane
E_USER_NOTICE - Domyślne. Generowane w czasie wykonywania. Skrypt znalazłem coś, co może być błędem, ale może się zdarzyć, że uruchomiony skrypt zostanie normalnie

Przykład

W tym przykładzie występuje E_USER_WARNING Jeśli zmienna "test" jest większa niż "1". Jeśli E_USER_WARNING występuje użyjemy naszej niestandardowej obsługi błędów i zakończymy skrypt:

<?php
//funkcja obsługi błędów
function bladUzytkownika($errno, $errstr)
{
echo "<b>Błąd:</b> [$errno] $errstr<br>";
echo "Koniec skryptu";
die();
}

//ustawienie obsługi błędów
set_error_handler("bladUzytkownika",E_USER_WARNING);

//wyzwolenie błędu
$test=2;
if ($test>1)
{
trigger_error("Wartość musi być 1 lub poniżej",E_USER_WARNING);
}
?>

 

Użycie powyższego kodu powinno być następujące:

Błąd: [512] Wartość musi być 1 lub poniżej
Koniec skryptu

Teraz, kiedy nauczyliśmy się tworzyć swoje własne błędy i jak je wywołać, można spojrzeć na rejestrowanie błędów.

Error Logging



Domyślnie PHP wysyła dziennik błędów do serwera logowania systemu lub pliku, w zależności od konfiguracji error_log jaka jest w pliku php.ini. Korzystając z funkcji error_log() możesz wysłać logi błędów do określonego pliku.

Wysyłanie komunikatów o błędach do siebie przez e-mail może być dobrym sposobem na uzyskiwanie konkretnych zgłoszonych błędów.

Wyślij komunikat o błędzie przez e-mail

W poniższym przykładzie, wyślemy e-mail z komunikatem o błędzie i zakończymy skrypt:

 

<?php
//funkcja obsługi błędów
function bladUzytkownika($errno, $errstr)
{
echo "<b>Błąd:</b> [$errno] $errstr<br>";
echo "Webmaster został powiadomiony";
error_log("Błąd: [$errno] $errstr",1,
"jakiś@example.com","From: This email address is being protected from spambots. You need JavaScript enabled to view it.");
}

//ustawienie obsługi błędów
set_error_handler("bladUzytkownika",E_USER_WARNING);

//wyzwolenie błędu
$test=2;
if ($test>1)
{
trigger_error("Wartość musi być 1 lub poniżej",E_USER_WARNING);
}
?>

Użycie powyższego kodu powinno być jak poniżej:

Błąd: [512] Wartość musi być 1 lub poniżej
Webmaster został powiadomiony

A wiadomości otrzymane z powyższego kodu wyglądają tak:

Błąd: [512] Wartość musi być 1 lub poniżej

Nie należy stosować wszystkich błędów. Regularne błędy powinny być rejestrowane na serwerze przy użyciu domyślnego systemu rejestrowania PHP.

 

Zobacz nasze wszystkie kursy

WWW


HTML
HTML - Znaczniki
CSS - Tutorial
CSS - Selektory
PHP
JavaScript

XML

XSLT

Bazy danych


SQL
SQLite
MySQL
PostgreSQL

 

 

Programowanie


C
C++
C#
Java
VisualBasic
Python

Linux


Podstawy Linuxa
Bash
Linuks artykuły

Windows


Excel funkcje
Windows wskazówki
Outlook

Pozotałe działy


Programy
Rozrywka

 

 

 

This email address is being protected from spambots. You need JavaScript enabled to view it.