Ultimele tutoriale de dezvoltare web
 

PHP Eroare de manipulare


Manipularea eroare implicită în PHP este foarte simplu. Un mesaj de eroare cu numele de fișier, numărul liniei și un mesaj care descrie eroarea este trimis la browser.


PHP Eroare de manipulare

La crearea script-uri și aplicații web, eroare de manipulare este o parte importantă. În cazul în care codul de eroare îi lipsește codul de verificare, programul poate arata foarte neprofesional si poti fi deschis la riscuri de securitate.

Acest tutorial conține unele dintre cele mai comune metode de eroare de verificare în PHP.

Vom arăta diferite metode de tratare a erorilor:

  • Simplu " die() " declarații
  • erori personalizate și declanșatoare de eroare
  • Eroare de raportare

Manipularea de bază Eroare: Utilizarea die() funcția

Primul exemplu arată un simplu script care se deschide un fișier text:

<?php
$file=fopen("welcome.txt","r");
?>

Dacă fișierul nu există s-ar putea obține o eroare de genul:

Warning : fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2

Pentru a preveni utilizatorul de la obtinerea un mesaj de eroare ca cea de mai sus, vom testa dacă fișierul există înainte de a încerca să-l accesați:

<?php
if(!file_exists("welcome.txt")) {
  die("File not found");
} else {
  $file=fopen("welcome.txt","r");
}
?>

Acum, dacă fișierul nu există primiți o eroare de genul:

File not found

Codul de mai sus este mai eficientă decât codul anterior, deoarece foloseste un simplu mecanism de eroare de manipulare pentru a opri scriptul după eroarea.

Cu toate acestea, pur și simplu oprirea script-ul nu este întotdeauna modul corect de a merge. Să aruncăm o privire la funcțiile alternative PHP pentru erorile de manipulare.


Crearea unei erori de manipulare personalizat

Crearea unui handler de eroare personalizată este destul de simplu. Pur și simplu a crea o funcție specială, care poate fi apelată atunci când apare o eroare în PHP.

Această funcție trebuie să fie capabil să se ocupe de un minim de doi parametri (nivel de eroare și mesaj de eroare) , dar poate accepta până la cinci parametri (optionally: file, line-number, and the error context) de (optionally: file, line-number, and the error context) :

Sintaxă

error_function(error_level,error_message,
error_file,error_line,error_context)
Parametru Descriere
error_level Necesar. Specifică nivelul de raport de eroare pentru eroarea definită de utilizator. Trebuie să fie un număr de valoare. A se vedea tabelul de mai jos pentru niveluri posibile de raport de eroare
error_message Necesar. Specifică mesajul de eroare pentru eroarea definită de utilizator
error_file Opțional. Specifică numele fișierului în care a apărut eroarea
error_line Opțional. Specifică numărul liniei în care a apărut eroarea
error_context Opțional. Specifică o matrice care conține fiecare variabilă și valorile lor, în timpul utilizării, când a apărut eroarea

Eroare la niveluri Raport

Aceste niveluri de eroare de raport sunt diferitele tipuri de erori de tratare a erorilor definite de utilizator pot fi utilizate pentru:

Valoare Constant Descriere
2 E_WARNING Non-fatale erori run-time. Executarea script-ul nu este oprit
8 E_NOTICE Notificări run-time. Script-ul găsit ceva care ar putea fi o eroare, dar se poate întâmpla, de asemenea, atunci când rulează în mod normal, un script
256 E_USER_ERROR Eroare generat de utilizator fatal. Aceasta este ca un E_ERROR stabilit de programator folosind funcția PHP trigger_error()
512 E_USER_WARNING Non-fatale generate de utilizator de avertizare. Aceasta este ca un E_WARNING stabilit de programator folosind funcția PHP trigger_error()
1024 E_USER_NOTICE User-a generat o notificare. Aceasta este ca un E_NOTICE stabilit de programator folosind funcția PHP trigger_error()
4096 E_RECOVERABLE_ERROR eroare fatală interceptabilă. Aceasta este ca un E_ERROR , dar poate fi prins de un mâner definit de utilizator (see also set_error_handler() a se (see also set_error_handler() , de (see also set_error_handler() , (see also set_error_handler() )
8191 E_ALL Toate erorile și avertismentele (E_STRICT became a part of E_ALL in PHP 5.4) a (E_STRICT became a part of E_ALL in PHP 5.4)

Acum, vă permite să creați o funcție să se ocupe de erori:

function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

Codul de mai sus este o funcție simplă de eroare de manipulare. Când este declanșat, acesta devine nivelul de eroare și un mesaj de eroare. Apoi scoate nivelul de eroare și mesajul și se termină scenariul.

Acum, că am creat o funcție de eroare de manipulare trebuie să decidă când ar trebui să fie declanșat.


Set de tratare a erorilor

Handler de eroare implicit pentru PHP este construit în tratare a erorilor. Vom face funcția de mai sus handler de eroare implicită pentru durata de script-ul.

Este posibil să se schimbe de tratare a erorilor de a aplica doar pentru unele erori, în acest fel script-ul poate manipula diferite erori în moduri diferite. Cu toate acestea, în acest exemplu vom folosi handler-ul nostru de eroare personalizată pentru toate erorile:

set_error_handler("customError");

Din moment ce ne dorim funcția noastră personalizată să se ocupe de toate erorile, The set_error_handler() , este nevoie de un singur parametru, un al doilea parametru poate fi adăugat pentru a specifica un nivel de eroare.

Exemplu

Testarea de tratare a erorilor prin încercarea de variabilă de ieșire care nu există:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr";
}

//set error handler
set_error_handler("customError");

//trigger error
echo($test);
?>

Ieșirea codului de mai sus ar trebui să fie ceva de genul:

Error: [8] Undefined variable: test

Declanșa o eroare

Într-un scenariu în care utilizatorii pot introduce date este util pentru a declanșa erori atunci când apare o intrare ilegală. În PHP, acest lucru se face de către trigger_error() funcția.

Exemplu

În acest exemplu se produce o eroare în cazul în care "test" variabila este mai mare decât "1" :

<?php
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below");
}
?>

Ieșirea codului de mai sus ar trebui să fie ceva de genul:

Notice : Value must be 1 or below
in C:\webfolder\test.php on line 6

O eroare poate fi declanșat oriunde doriți într-un script, și prin adăugarea unui al doilea parametru, puteți specifica ce este declanșat la nivel de eroare.

Tipuri de erori posibile:

  • E_USER_ERROR - Eroare fatală run-time generat de utilizatori. Erori care nu pot fi recuperate de la. Executarea script-ul este oprit
  • E_USER_WARNING - non-fatale generate de utilizator run-time de avertizare. Executarea script-ul nu este oprit
  • E_USER_NOTICE - implicit. generat de utilizator Notă run-time. Script-ul găsit ceva care ar putea fi o eroare, dar se poate întâmpla, de asemenea, atunci când rulează în mod normal, un script

Exemplu

În acest exemplu , un E_USER_WARNING are loc în cazul în care "test" variabila este mai mare decât "1" . Dacă apare o E_USER_WARNING vom folosi handler-ul nostru de eroare personalizată și a termina script-ul:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

Ieșirea codului de mai sus ar trebui să fie ceva de genul:

Error: [512] Value must be 1 or below
Ending Script

Acum, că am învățat să creăm propriile noastre greșeli și cum să le declanșeze, vă permite să aruncați o privire la logare eroare.


Eroare la conectarea

În mod implicit, PHP trimite un jurnal de erori la sistemul de logare al serverului sau un fișier, în funcție de modul în care configurația error_log este setată în fișierul php.ini. Prin utilizarea error_log() funcție , puteți trimite jurnalele de eroare într - un fișier sau o destinație la distanță specificată.

Trimiterea de mesaje de eroare pentru a vă prin e-mail poate fi o modalitate bună de a obține notificat de erori specifice.

Trimite un mesaj de eroare prin e-mail

In exemplul de mai jos vom trimite un e-mail cu un mesaj de eroare și se termină script-ul, în cazul în care apare o eroare specifică:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Webmaster has been notified";
  error_log("Error: [$errno] $errstr",1,
  "[email protected]","From: [email protected]");
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

Ieșirea codului de mai sus ar trebui să fie ceva de genul:

Error: [512] Value must be 1 or below
Webmaster has been notified

Și e-mail primit de la codul de mai sus arata ca acest lucru:

Error: [512] Value must be 1 or below

Acest lucru nu ar trebui să fie utilizat cu toate erorile. erori regulate ar trebui să fie conectat pe server folosind sistemul implicit PHP logare.