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: 38523
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-2024 v.1.5 | design: diviXdesign & rainbowcolors