Loading:


set_error_handler()

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.

 

Funkcja musi przyjąć dwa parametry: kod błędu, i ciÄ…g opisujÄ…cy błąd. NastÄ™pnie istniejÄ… trzy opcjonalne parametry, które mogÄ… być dostarczane: nazwa pliku, w którym wystÄ…piÅ‚ błąd, numer wiersza, w którym wystÄ…piÅ‚ błąd, i kontekst, w którym wystÄ…piÅ‚ błąd (tablica, która wskazuje na aktywny symbol tabeli w punkcie na błąd). Funkcja może być pokazywana jako:

     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.



Napisz Artyku³

Listing

<?php
//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 />




Dodano przez: divix
Ranga: Administrator serwisu Punktów: 38473
Komentarze użytkowników
    • Tre¶æ komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2021 v.1.5 | design: diviXdesign & rainbowcolors