set_error_handler(callback $ error_handler [, int $ error_types])
Ustawia zdefiniowane przez użytkownika funkcje obsługi błędów w skrypcie.
Ta funkcja może być użyta do określenia własnego sposobu obsługi błędów podczas uruchomienia, na przykład w aplikacjach, w których musisz zrobić sprzątania danych / plików, gdy dzieje się krytyczny błąd, lub gdy chcesz wywołać błąd w pewnych warunkach (przy użyciu trigger_error ()).
Ważne jest, aby pamiętać, że standard obsługi błędów PHP jest całkowicie pomijany. error_reporting () ustawienia będą miały żadnego wpływu i obsługi błędów zostanie wywołana bez względu - jednak wciąż jeste w stanie odczytać aktualną wartość error_reporting i działa właściwie. Szczególnie zwrócić uwagę na to, że to będzie wartość 0, jeżeli oświadczenie, że przyczyną błędu była prepended przez @ błędu kontroli operatora.
Następujące rodzaje błędów nie może być traktowane z funkcji zdefiniowanych przez użytkownika: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, a większość E_STRICT poruszonych w pliku gdzie set_error_handler () jest wywoływana.
Jeśli wystąpią błędy, zanim skrypt jest wykonany (np. na temat plików) niestandardowej obsługi błędów nie może być nazywany, gdyż nie jest zarejestrowany w tym czasie.
handler (int $ errno, $ string errstr [, string $ errfile [, int $ errline [, array $ errcontext]]])
errno
Pierwszy parametr, errno, zawiera poziom błędu podniesiony, jako liczba całkowita.
errstr
Drugi parametr, errstr, zawiera komunikat o błędzie, jako łańcuch znaków.
errfile
Trzeci parametr jest opcjonalny, errfile, które zawiera nazwę pliku, że błąd został już poruszony w jako ciąg znaków.
errline
Czwarty parametr jest opcjonalny, errline, który zawiera numer wiersza z błędem była poruszana na jako liczba całkowita.
errcontext
Piąty parametr jest opcjonalny, errcontext, którya jest tablicą, który wskazuje na aktywny symbol tabeli w momencie wystąpienia błędu. Innymi słowy, errcontext będzie zawierać tablicę wszystkich zmiennych, które istniały w zakresie błądu.
Kompatybilność: PHP4, PHP5.
Listing
//własna funkcja o błędzie
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
switch ($errno) {
case E_USER_ERROR:
echo "<b>Moje ostrzeżenie:</b> [$errno] $errstr<br />\n";
echo " Fatalny błąd w linii $errline w pliku $errfile";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
echo "Zamykanie procesu...<br />\n";
exit(1);
break;
case E_USER_WARNING:
echo "<b>Moje ostrzeżenie</b> [$errno] $errstr<br />\n";
break;
case E_USER_NOTICE:
echo "<b>Moja informacja:</b> [$errno] $errstr<br />\n";
break;
default:
echo "Ne rozpoznałem typu błędu: [$errno] $errstr<br />\n";
break;
}
/* nie wykonuje się ządne ostrzeżenie, zwraca TRUE */
return true;
}
// testowanie błędów
function scale_by_log($vect, $scale)
{
if (!is_numeric($scale) || $scale <= 0) {
trigger_error("log(x) for x <= 0 nie nie zdefiniowane: scale = $scale", E_USER_ERROR);
}
if (!is_array($vect)) {
trigger_error("Nie właściwa wartość wejściowa w array, numer oczekiwany", E_USER_WARNING);
return null;
}
$temp = array();
foreach($vect as $pos => $value) {
if (!is_numeric($value)) {
trigger_error("Wartość na pozycji $pos nie jest numerem 0 (zero)", E_USER_NOTICE);
$value = 0;
}
$temp[$pos] = log($scale) * $value;
}
return $temp;
}
// ustawia definicje użytkownika o obsłudze błedów
$old_error_handler = set_error_handler("myErrorHandler");
// na dole skrypty które zwracją nasze błędy
echo "vector a\n";
$a = array(2, 3, "foo", 5.5, 43.3, 21.11);
print_r($a);
// teraz generujemy drugą tablicę
echo "----\nvector b - a notice (b = log(PI) * a)\n";
/* Wartośc na pozycji nr $pos nie jest numerem */
$b = scale_by_log($a, M_PI);
print_r($b);
// Tu jest problem, dodajemy string do tablicy
echo "----\nvector c - a warning\n";
/* nie właściwy element tablicy */
$c = scale_by_log("not array", 2.3);
var_dump($c); // NULL
// to jest krytyczny błąd log od zera oraz ujemnej liczby jest nie zdefiniowany
echo "----\nvector d - fatal error\n";
/* log(x) for x <= 0 jest nie zdefiniowany, użyłeś: scale = $scale" */
$d = scale_by_log($a, -2.5);
var_dump($d); // nigdy nie osiągnie
?>
//zwróci:
vector a
Array
(
[0] => 2
[1] => 3
[2] => foo
[3] => 5.5
[4] => 43.3
[5] => 21.11
)
----
vector b - a notice (b = log(PI) * a)
<b>Moje ostrzeżenie:</b> [1024] Wartość na pozycji nr 2 nie jest numere używa 0 (zero)<br />|>
Array
(
[0] => 2.2894597716988
[1] => 3.4341896575482
[2] => 0
[3] => 6.2960143721717
[4] => 49.566804057279
[5] => 24.165247890281
)
----
vector c - a warning
<b>Moje ostrzeżenie</b> [512] Nie właściwa wartość wejściowa w array, numer oczekiwany<br />
NULL
----
vector d - fatal error
<b>Mój błąd:</b> [256] log(x) for x <= 0 jest nie zdefiniowany, użyłeś: scale = -2.5<br />
Fatalny błąd w linii 35 w pliku trigger_error.php, PHP 5.2.1 (FreeBSD)<br />
Zamykam...<br />
Ranga: Administrator serwisu Punktów: 0