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: 38473

