Manual PHP
Înapoi
Înainte
set_error_handler
Descriere
Setează o funcţie utilizator (error_handler) pentru gestionarea erorilor într-un script.
Returnează funcţia anterioară de gestiune (dacă există), sau FALSE în cazul unei erori.
Această funcţie vă permite definirea propriului mod de tratare a erorilor la execuţie, de exemplu în aplicaţii în care este nevoie de refacerea unor date / fişiere când apare o eroare critică, sau este necesară declanşarea unei erori dacă sunt îndeplinite anumite condiţii (folosind trigger_error()).
Funcţia definită de utilizator trebuie să accepte doi parametri: codul de eroare şi un şir de caractere care descrie eroarea.
Începând cu versiunea PHP 4.0.2 sunt acceptaţi încă trei parametri opţionali: numele fişierului în care a apărut eroarea, numărul liniei la care s-a produs această eroare şi contextul în care ea a apărut (un tablou care indică tabela de simboluri activă în punctul în care a apărut eroarea).
Mai jos este exemplificată tratarea unei excepţii interne prin declanşarea erorilor şi tratarea lor cu o funcţie definită de utilizator:
Exemplu 1.
Tratarea erorilor cu ajutorul funcţiilor set_error_handler() şi trigger_error()
?php / / redefinirea constantelor de eroare - doar în PHP 4 define ('FATAL', E_USER_ERROR); define ('ERROR', E_USER_WARNING); define ('WARNING', E_USER_NOTICE); / / setarea nivelului de raportare a erorilor pentru acest script error_reporting(FATAL | ERROR | WARNING); / / funcţia de tratare a erorilor function myErrorHandler ($errlevel, $errstr, $errfile, $errline) {switch ($errlevel) {case FATAL: echo "b FATAL / b [$errlevel] $errstr br \n". "Eroare fatala la linia $errline in fisierul $errfile," "PHP".
PHP_VERSION. "(".
PHP_OS. ") br \n"; "Abandon... br \n"; exit(1); break; case ERROR: echo" b ERROR / b [$errlevel] $errstr br \n"; break; case WARNING: echo "b WARNING / b [$errlevel] $errstr br \n"; break; default: echo "Eroare de tip necunoscut: [$errlevel] $errstr br \n"; break;}} / / funcţie pentru testarea tratării erorilor function scale_by_log ($vect, $scale) {if (!is_numeric($scale) | | $scale = 0) {trigger_error("log(x) pentru x = 0 nu este definita, ati folosit: scale = $scale", FATAL);} if (!is_array($vect)) {trigger_error("Tablou de intrare incorect, trebuia un tablou de valori", ERROR); return null;} for ($i = 0; $i count($vect); $i++) {if (!is_numeric($vect[$i])) {trigger_error("Valoarea de la pozitia $i nu este un numar, se va folosi 0 (zero)", WARNING);} $temp[$i] = log($scale) * $vect[$i];} return $temp;} / / setarea gestionarului de erori definit de utilizator $old_error_handler = set_error_handler("myErrorHandler"); / / se defineşte un tablou cu un element non-numeric / / şi se declanşează eroare echo "tablou a pre \n"; $a = array(2, 3, "foo", 5.5, 43.3, 21.11); print_r($a); echo" / pre "; / / se generează al doilea tablou şi se declanşează o avertizare echo "--- - br \ntablou b - o atentionare (b = log(PI) * a)\n pre"; $b = scale_by_log($a, M_PI); print_r($b); echo "/ pre"; / / se transmite un şir de caractere în loc de un tablou echo "--- - br \ntablou c - eroare\n pre "; $c = scale_by_log("nu este tablou", 2.3); var_dump($c); echo" / pre \n"; / / o eroare critica: nu este definit log() pentru zero sau numere negative echo "--- - br \ntablou d - eroare fatala\n"; $d = scale_by_log($a, -2.5);?
tablou a Array ([0] = 2 [1] = 3 [2] = foo [3] = 5.5 [4] = 43.3 [5] = 21.11) --- - tablou b - o atentionare (b = log(PI) * a) WARNING [1024] Valoarea de la pozitia 2 nu este un numar, se va folosi 0 (zero) Array ([0] = 2.2894597716988 [1] = 3.4341896575482 [2] = 0 [3] = 6.2960143721717 [4] = 49.566804057279 [5] = 24.165247890281) --- - tablou c - eroare ERROR [512] Tablou de intrare incorect, trebuia un tablou de valori NULL --- - tablou d - eroare fatala FATAL [256] log(x) pentru x = 0 nu este definita, ati folosit: scale = -2.5 Eroare fatala la linia 37 in fisierul / softure / htdocs / test.php, PHP 4.0.6 (Linux) Abandon...
1
Este important de reţinut că gestionarul standard PHP al erorilor va fi ignorat complet.
Setările efectuate de error_reporting() nu vor mai avea nici un efect şi va fi apelată doar funcţia definită de utilizator.
Se poate citi în continuare valoarea curentă setată de error_reporting() pentru folosire adecvată.
Trebuie făcută menţiunea că această valoare va fi zero dacă instrucţiunea care a generat eroarea este precedată de operatorul @ de control a erorilor.
De asemenea, trebuie precizat că este responsabilitatea programatorului să apeleze funcţia die() dacă este necesar.
Dacă funcţia de tratare a erorii nu întrerupe explicit execuţia, scriptul va continua cu instrucţiunea următoare celei care a generat eroarea.
Mai consultaţi error_reporting(), restore_error_handler(), trigger_error(), user_error().
Înapoi
Acasã
Înainte
Sus