Eroare de manipulare în PHP

Eroare de manipulare în PHP

Eroare de manipulare cu trigger_error () și set_error_handler ()

PHP oferă o oportunitate excelentă de a monitoriza orice erori. Aici vom vorbi despre modul în care să se ocupe de eroare - raportul (sau un raport) despre incident pentru utilizator, dacă este necesar - să informeze administratorul prin e-mail, notați informațiile despre incident în jurnalul de fișier.

Deci, în primul rând, să definim ce eroarea în PHP.

PHP suportă următoarele niveluri de eroare:

E_ERROR
E_WARNING
E_PARSE
E_NOTICE
E_CORE_ERROR
E_CORE_WARNING
E_COMPILE_ERROR
avertizate E_COMPILE_WARNING
E_USER_ERROR
E_USER_WARNING
E_USER_NOTICE
E_ALL
E_STRICT

De fapt - este doar o constantă care este utilizat pentru a determina nivelul de eroare de manipulare, construirea unui bit-mască. Constante sunt „vorbind“ nume. Privind la constanta - putem spune că eroarea de nivel E_PARSE apare în cazul unei erori de sintaxă, E_NOTICE - este un memento pentru programator cu privire la încălcarea „stil bun“ de programare în PHP.

Când compusul cu baza de date MySQL bază (sau altele) eșuează - interpret PHP informează eroare de nivel E_WARNING

Notă: Pentru a PHP interpret raportat eroare - PHP ar trebui să fie configurat în mod corespunzător: ar trebui să fie inclus display_errors pavilion - 1, error_reporting directivă ar trebui să indice faptul că este necesar să se afișeze eroare de nivel E_WARNING (desigur, este de dorit și altele). În cazul în care valorile acestor directive nu satisface nevoile dvs. - puteți încerca să-l instalați le pune într-un dosar cu fișierul .htaccess script-ul (punct la începutul numelui necesar) cu privire la acest conținut:

display_errors php_flag pe
php_value error_reporting „E_ALL

Acest lucru înseamnă că, eroare sunt afișate mesaje, și la toate nivelurile, cu excepția E_NOTICE Când programator permite o eroare de sintaxă - PHP interpret raportează un nivel de eroare E_PARSE

Dar cel mai interesant pentru noi, ratele de eroare - E_USER_ERROR și E_USER_WARNING. După cum reiese din titlu - acest lucru niveluri de eroare care pot fi instalate de către utilizator. În acest scop se trigger_error () funcție - cu ajutorul ei, puteți notifica utilizatorul cu privire la un incident ca acest lucru face PHP.

După cum știm din manualul PHP - trigger_error () funcția are doi parametri.

void trigger_error (ERROR_MSG string [, int ERROR_TYPE])

Prima opțiune - textul mesajului de eroare, cum ar fi „imposibil de gasit“. A doua opțiune - determină nivelul de erori. Funcția trigger_error () funcționează numai cu eroare de familie E_USER - înseamnă că puteți instala eroare de nivel E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE și nu se poate stabili un nivel E_WARNING. Al doilea parametru este opțional și implicit la E_USER_NOTICE.

Să presupunem datele noastre pentru feed-uri de știri sunt stocate în fișierul news.txt, iar dacă fișierul nu este găsit - trebuie să raportați o eroare. Textul program va arata ceva de genul:

Ca urmare, interpretorul PHP va raporta un nivel E_USER_NOTICE eroare, dar ceea ce ne dă? Pentru a începe cu faptul că, în cazul în php.ini sau fișierul .htaccess au fost instalate în /home/mysite/my.log Fișierul de directivă va fi adăugat automat la înregistrarea incidentului. În continuare, folosind funcția set_error_handler (), putem instala propriile erori handler care apar în timpul executării unui script PHP.

După cum se cunoaște din manual - in PHP 4 functie are un singur parametru șir - numele funcției care urmează să fie executate de fiecare dată când apare o eroare. PHP 5 adaugă capacitatea de a seta mai mult de un parametru - tipul de eroare care vor fi procesate cu ajutorul handler-ul nostru. Funcția returnează un șir de caractere - numele handler care a fost creat în acest punct.

set_error_handler string (callback error_handler [, int error_types])

setat ca funcție definită de utilizator, care se va ocupa eroarea, se poate lua următorii parametri de intrare:

- cod de eroare la nivel de
- erori de interpretare string
- numele fișierului în cazul în care a apărut eroarea
- line unde a apărut eroarea

De asemenea, trebuie remarcat faptul că această funcție nu poate manipula erori E_ERROR niveluri, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, avertizate E_COMPILE_WARNING

Acest lucru se datorează faptului că erorile enumerate nivelurile care are loc înainte interpretul primește informații despre un utilizator de tratare a erorilor.

Prin urmare, ne declarăm funcția noastră Notă: fiecare surround, mai mult sau mai puțin script-ul este de obicei împărțită în mai multe fișiere pentru comoditatea de a lucra cu el. Cum de a organiza un program modular - un subiect de conversație în monoterapie. Acum, vreau doar să sfătuiesc să aloce setările generale într-un fișier separat, care va fi conectat la începutul programului folosind includ instruirea, fie prin Directiva auto_prepend_file. Acest fișier poate fi plasat și handler-ul nostru. tratare a erorilor de instalare trebuie să fie realizată cât mai aproape posibil de la începutul programului, este de dorit, în primul rând. Pentru a vă asigura că funcționează într-adevăr - a crea un nou fișier PHP și să încerce să-l rulați

Fișier Conținut myerrortest.php

Rezultatul procesării fișierului arată astfel: Acum avem o funcție care primește date cu privire la toate erorile care apar. Considerăm că modul în care putem folosi.

Vom procesa nivelurile de eroare
E_ERROR
E_WARNING
E_NOTICE
E_USER_ERROR
E_USER_NOTICE

Primele trei erori într-un program de finit bun nu ar trebui să se întâmple deloc, așa că pentru ei vom notifica numai terminalul de utilizator al textului de eroare pe ecran. Deci, poate lucra atât timp cât script-ul este capabil să dezvolte, și apoi le raportare, puteți fie dezactiva sau scrie într-un fișier jurnal.

Acum, funcția noastră este manipularea de eroare va arata ceva de genul:

Acesta este un exemplu destul de simplu, subiectul poate fi dezvoltat.