Latest web development tutorials
×

PHP kurs

PHP kurs PHP krótkie wprowadzenie PHP zainstalować PHP gramatyka PHP zmienna PHP echo/print PHP Typy danych PHP stały PHP sznur PHP operatorzy PHP If...Else PHP Switch PHP szyk PHP Sortowanie tablicy PHP superglobalne PHP While krążenie PHP For krążenie PHP funkcja PHP Magiczne Zmienne PHP Przestrzenie nazw PHP Obiektowe

PHP forma

PHP forma PHP Uwierzytelnianie za pomocą formularzy PHP forma - wymagane pola PHP forma - Weryfikacja e-mail i adres URL PHP Kompletna wystąpienie formularza PHP $_GET zmienna PHP $_POST zmienna

PHP zaawansowane Tutorial

PHP Tablice wielowymiarowe PHP data PHP zawierać PHP plik PHP Prześlij plik PHP Cookie PHP Session PHP E-mail PHP bezpieczeństwo E-mail PHP Error PHP Exception PHP filtr PHP Filtr zaawansowany PHP JSON

PHP 7 Nowe funkcje

PHP 7 Nowe funkcje

PHP baza danych

PHP MySQL krótkie wprowadzenie PHP MySQL połączenie PHP MySQL Tworzenie bazy danych PHP MySQL Tworzenie tabeli danych PHP MySQL Należy wprowadzić dane PHP MySQL Wstawić wiele danych PHP MySQL Przygotowane sprawozdania PHP MySQL odczytać dane PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX krótkie wprowadzenie AJAX PHP AJAX baza danych AJAX XML AJAX Wyszukiwanie w czasie rzeczywistym AJAX RSS Reader AJAX głosowanie

PHP Reference Manual

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP Przetwarzanie obrazu PHP RESTful

Obsługa błędów w PHP

W PHP, domyślna obsługa błędów jest bardzo prosta. Komunikat o błędzie jest wysyłany do przeglądarki, wiadomości z nazwą pliku, numer linii oraz opis komunikatu o błędzie.


Obsługa błędów w PHP

Podczas tworzenia skryptów i aplikacji internetowych, obsługa błędów jest ważnym elementem. Jeśli kod błędu brakuje kodu sprawdzającego, program może wyglądać bardzo nieprofesjonalne, ale także otwiera drzwi do zagrożeń bezpieczeństwa.

Ten poradnik przedstawia niektóre z najważniejszych w PHP metody wykrywania błędów.

Będziemy wyjaśnić różne metody obsługi błędów:

  • Simple "die ()" oświadczenie
  • Błędy niestandardowe i wyzwalacze błędach
  • Raportowanie błędów

Podstawowe Obsługa błędów: Korzystanie z kostką function ()

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

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

Jeśli plik nie istnieje, dostaniesz błąd podobny do tego:

Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in /www/w3big/test/test.php on line 2

Aby uniemożliwić użytkownikom uzyskiwanie komunikat o błędzie podobny do powyższego, zbadaliśmy plik przed dostępem do pliku istnieje:

<?php
if(!file_exists("welcome.txt"))
{
	die("文件不存在");
}
else
{
	$file=fopen("welcome.txt","r");
}
?>

Teraz, jeśli plik nie istnieje, pojawi się komunikat o błędzie podobny do następującego:

文件不存在

W porównaniu do poprzedniego kodu, powyższy kod jest bardziej efektywne, ponieważ wykorzystuje prosty mechanizm obsługi błędów, aby zakończyć skrypt po błędzie.

Jednak wystarczy wypowiedzieć skrypt nie zawsze jest właściwa droga. Spójrzmy na alternatywnych funkcji PHP do obsługi błędów.


Tworzenie Error Handler niestandardowy

Tworzenie niestandardowej procedury obsługi błędów jest dość prosta. Po prostu utworzyć specjalną funkcję, która może zostać wywołana, gdy wystąpi błąd w PHP.

Funkcja ta musi być w stanie obsłużyć co najmniej dwóch parametrów (poziom błędu oraz komunikat o błędzie), ale może przyjąć maksymalnie pięciu parametrów (opcjonalnie plików, line-numerycznych i kontekst błędu):

gramatyka

error_function(error_level,error_message,
error_file,error_line,error_context)
parametry opis
error_level Wymagany. Błąd jest definiowana jako poziom raportowania błędów użytkownika. To musi być liczbą. Patrz poniższa tabela: poziom raportowania błędów.
error_message Wymagany. Zdefiniowany przez użytkownika komunikat o błędzie stwierdził.
error_file Opcjonalne. Nazwa pliku wystąpił określony błąd.
ERROR_LINE Opcjonalne. Ustalonej liczbie linii wystąpił błąd.
error_context Opcjonalne. Określa tablicę zawierającą każdą zmienną, gdy wystąpi błąd w użyciu i ich wartości.

poziom raportowania błędów

Te poziomy o wadzie są różne rodzaje błędów Error Handler niestandardowego przetwarzania:

常量 描述
2 E_WARNING 非致命的 run-time 错误。不暂停脚本执行。
8 E_NOTICE run-time 通知。在脚本发现可能有错误时发生,但也可能在脚本正常运行时发生。
256 E_USER_ERROR 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。
512 E_USER_WARNING 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。
1024 E_USER_NOTICE 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。
4096 E_RECOVERABLE_ERROR 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler())
8191 E_ALL 所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分)

Teraz stwórzmy funkcję obsługi błędów:

function customError($errno, $errstr)
{
	echo "<b>Error:</b> [$errno] $errstr<br>";
	echo "脚本结束";
	die();
}

Powyższy kod jest prostą funkcją obsługi błędów. Gdy zostanie uruchomiony, będzie się poziom błędów i komunikaty o błędach. Następnie wyprowadza poziom błędu oraz komunikat i kończy skrypt.

Teraz, stworzyliśmy funkcję obsługi błędów, musimy określić, kiedy należy wywołać funkcję.


Konfiguracja obsługi błędów

Domyślnym obsługi błędów PHP jest wbudowany obsługi błędów. Mamy zamiar przekształcić funkcję powyżej obsługi błędów domyślny czas trwania skryptu.

Można zmodyfikować obsługi błędów, tak że zastosowane tylko do pewnego błędu, więc skrypt może być różne sposoby obsługi różnych błędów. Jednak w tym przypadku mamy zamiar wykorzystać wszystkie błędy Error Handler nasz zwyczaj:

set_error_handler("customError");

Ponieważ chcemy, aby nasza funkcja zwyczaj obsłużyć wszystkie błędy, set_error_handler () potrzebne tylko jeden parametr, można dodać drugi argument, aby określić poziom błędu.

Przykłady

Próbując wyjściowej zmiennej, która nie istnieje, aby przetestować obsługi błędu:

<?php
// 错误处理函数
function customError($errno, $errstr)
{
	echo "<b>Error:</b> [$errno] $errstr";
}

// 设置错误处理函数
set_error_handler("customError");

// 触发错误
echo($test);
?>

Wyjście kodu powyżej są następujące:

Error: [8] Undefined variable: test


błąd wyzwalania

W skrypcie dane miejsce wprowadzania danych przez użytkownika, gdy dane wejściowe użytkownika nie jest wyzwalany, gdy błąd jest przydatna. PHP, odbywa się to przez funkcję trigger_error (), aby zakończyć.

Przykłady

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

<?php
$test=2;
if ($test>1)
{
	trigger_error("变量值必须小于等于 1");
}
?>

Wyjście kodu powyżej są następujące:

Notice: 变量值必须小于等于 1
in /www/test/w3big.php on line 5

Można wywołać błąd w skrypcie w dowolnym miejscu, poprzez dodanie drugiego parametru można określić poziom błędu jest wyzwalany.

Możliwe typy błędów:

  • E_USER_ERROR - krytyczny błąd czasu generowane przez użytkowników. Nieodwracalny błąd. Wykonywanie skryptu zostanie przerwane.
  • E_USER_WARNING - Non-fatal ostrzegawczy run-time generowane przez użytkowników. Wykonywanie skryptu nie jest przerwany.
  • E_USER_NOTICE - domyślna. Zawiadomienie run-time generowane przez użytkowników. Gdy skrypt znaleźć może wystąpić błąd, ale może również wystąpić podczas normalnego działania skryptu.

Przykłady

W tym przykładzie, jeśli zmienna "test" jest większa niż "1" pojawia się E_USER_WARNING błędu. Jeśli tak się stanie E_USER_WARNING użyjemy naszej obsługi błędów i zakończyć skrypt:

<?php
// 错误处理函数
function customError($errno, $errstr)
{
	echo "<b>Error:</b> [$errno] $errstr<br>";
	echo "脚本结束";
	die();
}

// 设置错误处理函数
set_error_handler("customError",E_USER_WARNING);

// 触发错误
$test=2;
if ($test>1)
{
	trigger_error("变量值必须小于等于 1",E_USER_WARNING);
}
?>

Wyjście kodu powyżej są następujące:

Error: [512] 变量值必须小于等于 1
脚本结束

Teraz, kiedy dowiedziałem się, jak utworzyć własny błąd i jak je wywołać, spójrzmy w dzienniku błędów.


Dziennik błędów

W przypadku niedotrzymania warunków, zgodnie z konfiguracją error_log jest ustawiony w php.ini, PHP wysyła system nagrywania błędzie rejestrowania lub serwera plików. Korzystając z error_log () może wysłać logi błędów do określonego pliku lub zdalnego połączenia.

Wysyła komunikat o błędzie do siebie e-mail jest dobrym sposobem, aby otrzymywać powiadomienia o konkretnych błędów.

Komunikat o błędzie jest wysyłane przez E-Mail

W poniższym przykładzie, gdy wystąpi błąd specyficzny, wyślemy e-mail z komunikatem o błędzie i kończy skrypt:

<?php
// 错误处理函数
function customError($errno, $errstr)
{
	echo "<b>Error:</b> [$errno] $errstr<br>";
	echo "已通知网站管理员";
	error_log("Error: [$errno] $errstr",1,
	"s[email protected]","From: [email protected]");
}

// 设置错误处理函数
set_error_handler("customError",E_USER_WARNING);

// 触发错误
$test=2;
if ($test>1)
{
	trigger_error("变量值必须小于等于 1",E_USER_WARNING);
}
?>

Wyjście kodu powyżej są następujące:

Error: [512] 变量值必须小于等于 1
已通知网站管理员

Wiadomości otrzymywane od powyższego kodu jest następujący:

Error: [512] 变量值必须小于等于 1

Metoda ta nie nadaje się do wszystkich błędów. Błąd konwencjonalny powinien być za pomocą PHP domyślnego systemu logowania do zapisu na serwerze.