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