Gli ultimi tutorial di sviluppo web
 

PHP Gestione degli errori


La gestione degli errori di default in PHP è molto semplice. Un messaggio di errore con il nome del file, il numero di riga e un messaggio che descrive l'errore viene inviato al browser.


PHP Gestione degli errori

Durante la creazione di script e applicazioni web, la gestione degli errori è una parte importante. Se il codice di errore manca codice di controllo, il programma può sembrare molto poco professionale e si può essere aperti a rischi per la sicurezza.

Questa esercitazione contiene alcune delle l'errore più comune controllo dei metodi in PHP.

Mostreremo diversi metodi di gestione degli errori:

  • Semplice " die() " dichiarazioni
  • errori personalizzati e trigger di errore
  • segnalazione degli errori

Di base Gestione degli errori: Usando il die() funzione

Il primo esempio mostra un semplice script che si apre un file di testo:

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

Se il file non esiste si potrebbe ottenere un errore come questo:

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

Per evitare che l'utente di ottenere un messaggio di errore come quello di cui sopra, ci prova se il file esiste prima di cercare di accedervi:

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

Ora, se il file non esiste si ottiene un errore come questo:

File not found

Il codice di cui sopra è più efficiente rispetto al codice precedente, perché utilizza un semplice meccanismo di gestione degli errori per fermare lo script dopo l'errore.

Tuttavia, semplicemente fermando lo script non è sempre la strada giusta da percorrere. Diamo uno sguardo alle funzioni PHP alternative per la gestione degli errori.


Creazione di un gestore di errore personalizzato

La creazione di un gestore di errore personalizzato è abbastanza semplice. Creiamo semplicemente una funzione speciale che può essere chiamato quando si verifica un errore in PHP.

Questa funzione deve essere in grado di gestire un minimo di due parametri (livello di errore e il messaggio di errore), ma può accettare fino a cinque parametri (optionally: file, line-number, and the error context) :

Sintassi

error_function(error_level,error_message,
error_file,error_line,error_context)
Parametro Descrizione
error_level Necessario. Specifica il livello di rapporto di errore per l'errore definito dall'utente. Deve essere un numero di valore. Vedere la tabella di seguito per le possibili livelli di segnalazione errori
error_message Necessario. Specifica il messaggio di errore per l'errore definito dall'utente
error_file Opzionale. Specifica il nome del file in cui si è verificato l'errore
error_line Opzionale. Specifica il numero di riga in cui si è verificato l'errore
error_context Opzionale. Specifica una matrice contenente tutte le variabili, ei loro valori, in uso quando si è verificato l'errore

Errore livelli report

Questi livelli di rapporto di errore sono i diversi tipi di errore del gestore di errore definito dall'utente può essere utilizzato per:

Valore Costante Descrizione
2 E_WARNING errori di runtime non fatali. L'esecuzione dello script non viene arrestata
8 E_NOTICE comunicazioni run-time. Lo script ha trovato qualcosa che potrebbe essere un errore, ma potrebbe accadere anche durante l'esecuzione di uno script normalmente
256 E_USER_ERROR errore generato dall'utente fatale. Questo è come un E_ERROR impostato dal programmatore utilizzando la funzione PHP trigger_error()
512 E_USER_WARNING Non fatale avvertimento generati dagli utenti. Questo è come un E_WARNING impostato dal programmatore utilizzando la funzione PHP trigger_error()
1024 E_USER_NOTICE User-generato preavviso. Questo è come un E_NOTICE impostato dal programmatore utilizzando la funzione PHP trigger_error()
4096 E_RECOVERABLE_ERROR errore fatale catchable. Questo è come E_ERROR ma può essere catturato da una maniglia definito dall'utente (see also set_error_handler() )
8191 E_ALL Tutti gli errori e le avvertenze (E_STRICT became a part of E_ALL in PHP 5.4)

Ora lascia creare una funzione per gestire gli errori:

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

Il codice di cui sopra è una semplice funzione di gestione degli errori. Quando viene attivato, si ottiene il livello di errore e un messaggio di errore. E poi emette il livello di errore e il messaggio e termina lo script.

Ora che abbiamo creato una funzione di gestione degli errori dobbiamo decidere quando deve essere attivato.


Set Error Handler

Il gestore degli errori di default per PHP è il costruito nel gestore degli errori. Abbiamo intenzione di rendere la funzione di sopra del gestore degli errori predefinito per la durata dello script.

E 'possibile cambiare il gestore degli errori di applicare solo per alcuni errori, in questo modo lo script in grado di gestire diversi errori in modi diversi. Tuttavia, in questo esempio, ci accingiamo a utilizzare il nostro gestore di errore personalizzato per tutti gli errori:

set_error_handler("customError");

Dal momento che vogliamo che la nostra funzione personalizzata per gestire tutti gli errori, il set_error_handler() aveva bisogno di un solo parametro, un secondo parametro potrebbe essere aggiunto per specificare un livello di errore.

Esempio

Test del gestore di errore cercando di variabile di uscita che non esiste:

<?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);
?>

L'uscita del codice di cui sopra dovrebbe essere qualcosa di simile a questo:

Error: [8] Undefined variable: test

Attivare un errore

In uno script dove gli utenti possono dati di input è utile per far scattare gli errori quando si verifica un ingresso illegale. In PHP, questo viene fatto dal trigger_error() la funzione.

Esempio

In questo esempio si verifica un errore se il "test" variabile è maggiore di "1" :

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

L'uscita del codice di cui sopra dovrebbe essere qualcosa di simile a questo:

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

Un errore può essere attivato ovunque si desidera in uno script, e con l'aggiunta di un secondo parametro, è possibile specificare il livello di errore viene attivato.

Possibili tipi di errore:

  • E_USER_ERROR - Errore di run-time generati dagli utenti fatale. Errori che non possono essere recuperati da. L'esecuzione dello script viene arrestata
  • E_USER_WARNING - allarme marcia a tempo generati dagli utenti non-fatale. L'esecuzione dello script non viene arrestata
  • E_USER_NOTICE - Default. avviso di run-time generati dagli utenti. Lo script ha trovato qualcosa che potrebbe essere un errore, ma potrebbe accadere anche durante l'esecuzione di uno script normalmente

Esempio

In questo esempio un E_USER_WARNING si verifica se il "test" variabile è maggiore di "1" . Se si verifica un E_USER_WARNING useremo il nostro gestore degli errori personalizzato e terminare lo script:

<?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);
}
?>

L'uscita del codice di cui sopra dovrebbe essere qualcosa di simile a questo:

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

Ora che abbiamo imparato a creare i nostri propri errori e su come innescare loro, consente di dare un'occhiata alla registrazione degli errori.


registrazione degli errori

Per impostazione predefinita, il PHP invia un log degli errori di sistema di registrazione del server o di un file, a seconda di come la configurazione error_log si trova nel file php.ini. Usando error_log() funzione è possibile inviare i registri degli errori in un file specificato o una destinazione remota.

L'invio di messaggi di errore per te via e-mail può essere un buon modo di ottenere notificato di errori specifici.

Invia un messaggio di errore tramite e-mail

Nell'esempio che segue mandiamo un e-mail con un messaggio di errore e terminare lo script, se si verifica un errore specifico:

<?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);
}
?>

L'uscita del codice di cui sopra dovrebbe essere qualcosa di simile a questo:

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

E il messaggio ricevuto dal codice sopra appare così:

Error: [512] Value must be 1 or below

Questo non deve essere usato con tutti gli errori. errori regolari devono essere registrati sul server utilizzando il sistema di registrazione PHP di default.