PHP Gestione degli errori
In PHP, la gestione degli errori di default è molto semplice. Un messaggio di errore viene inviato al browser, il messaggio con il nome del file, il numero di riga e una descrizione del messaggio di errore.
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, ma apre anche la porta a rischi per la sicurezza.
Questo tutorial introduce alcune del metodo di rilevazione degli errori più importante in PHP.
Spiegheremo i tuoi diversi metodi di gestione degli errori:
- Semplice "die ()" dichiarazione
- errori personalizzati e trigger di errore
- Segnalazione errori
Base Gestione degli errori: Utilizzando la funzione di stampo ()
Il primo esempio mostra un semplice script che apre un file di testo:
<?php $file=fopen("welcome.txt","r"); ?>
Se il file non esiste, si otterrà un errore come questo:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in /www/w3big/test/test.php on line 2
Per impedire agli utenti di ottenere un messaggio di errore simile al precedente, abbiamo esaminato il file prima di accedere al file esiste:
<?php if(!file_exists("welcome.txt")) { die("文件不存在"); } else { $file=fopen("welcome.txt","r"); } ?>
Ora, se il file non esiste, si ottiene questo messaggio di errore simile a:
文件不存在
Rispetto al codice precedente, il codice precedente è più efficiente, in quanto utilizza un semplice meccanismo di gestione degli errori per terminare lo script dopo l'errore.
Tuttavia, è sufficiente terminare lo script non è sempre la strada giusta. Vediamo funzioni PHP alternative per la gestione degli errori.
La creazione di un gestore di errore personalizzato
Creare 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 almeno due parametri (livello di errore e messaggio di errore), ma può accettare fino a cinque parametri (opzionalmente: file, numero di riga e di contesto errori):
grammatica
error_function(error_level,error_message, error_file,error_line,error_context)
parametri | descrizione |
---|---|
error_level | Richiesto. Errore è definito come un livello di segnalazione degli errori definito dall'utente. Deve essere un numero. Vedere la seguente tabella: livello di segnalazione degli errori. |
error_message | Richiesto. messaggio di errore di errore definito dall'utente dichiarato. |
ERROR_FILE | Opzionale. si è verificato il nome del file di errore specificato. |
ERROR_LINE | Opzionale. Predeterminato numero di riga è verificato l'errore. |
error_context | Opzionale. Specifica un array contenente tutte le variabili quando si verifica un errore in uso e dei loro valori. |
livello di segnalazione degli errori
Questi livelli di report di errore sono i diversi tipi di errori Errore Handler elaborazione di abitudine:
值 | 常量 | 描述 |
---|---|---|
2 | E_WARNING | 非致命的 run-time 错误。不暂停脚本执行。 |
8 | E_NOTICE | run-time 通知。在脚本发现可能有错误时发生,但也可能在脚本正常运行时发生。 |
256 | E_USER_ERROR | 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。 |
512 | E_USER_WARNING | 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。 |
1024 | E_USER_NOTICE | 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。 |
4096 | E_RECOVERABLE_ERROR | 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler()) |
8191 | E_ALL | 所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分) |
Ora, creiamo una funzione per gestire gli errori:
function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); }
Il codice di cui sopra è una semplice funzione di gestione degli errori. Quando viene attivato, si otterrà il livello di errore ei messaggi di errore. E poi emette il livello di errore e il messaggio e termina lo script.
Ora, abbiamo creato una funzione di gestione degli errori, abbiamo bisogno di determinare quando attivare la funzione.
Impostazione gestore degli errori
gestore degli errori di default di PHP è un gestore degli errori incorporato. Abbiamo intenzione di trasformare la funzione di cui sopra l'errore di default la durata gestore dello script.
È possibile modificare il gestore degli errori in modo che si applicava solo a qualche errore, quindi lo script può essere diversi modi per gestire diversi errori. Tuttavia, in questo caso, intendiamo utilizzare per tutti Handler errori Errore nostra abitudine:
set_error_handler("customError");
Dal momento che vogliamo che la nostra funzione personalizzata per gestire tutti gli errori, set_error_handler () aveva bisogno di un solo parametro, è possibile aggiungere un secondo argomento per specificare un livello di errore.
Esempi
Cercando di grandezza d'uscita che non esiste, per testare il gestore di errore:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } // 设置错误处理函数 set_error_handler("customError"); // 触发错误 echo($test); ?>
L'output del codice sopra è il seguente:
Error: [8] Undefined variable: test
Errore trigger
Nello script la posizione di input di dati dell'utente quando l'input dell'utente non viene attivato quando un errore è utile. In PHP, questo viene fatto dalla funzione trigger_error () per completare.
Esempi
In questo esempio, se la variabile "test" è maggiore di "1", si verifica un errore:
<?php $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1"); } ?>
L'output del codice sopra è il seguente:
Notice: 变量值必须小于等于 1 in /www/test/w3big.php on line 5
È possibile attivare un errore nello script ovunque, con l'aggiunta di un secondo parametro, è possibile specificare il livello di errore viene attivato.
Possibili tipi di errori:
- E_USER_ERROR - Errore di run-time generati dagli utenti fatale. Errore irreversibile. l'esecuzione dello script viene interrotta.
- E_USER_WARNING - avvertimento di run-time generati dagli utenti non-fatale. l'esecuzione di script non viene interrotta.
- E_USER_NOTICE - default. avviso di run-time generati dagli utenti. Quando lo script ha trovato potrebbe verificarsi un errore, ma può verificarsi anche in normali script di funzionamento.
Esempi
In questo esempio, se la variabile "test" è maggiore di "1", si verifica E_USER_WARNING errore. Se questo accade E_USER_WARNING, useremo il nostro gestore degli errori personalizzato e terminare lo script:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>
L'output del codice sopra è il seguente:
Error: [512] 变量值必须小于等于 1 脚本结束
Ora che abbiamo imparato come creare il proprio errore, e come innescare loro, diamo un'occhiata al log degli errori.
registro errori
In caso di inadempienza, a seconda della configurazione error_log si trova nel php.ini, PHP invia un sistema di registrazione di errore per registrare o file server. Usando il error_log () funzione è possibile inviare i registri degli errori in un file specificato o una destinazione remota.
Si invia un messaggio di errore a se stessi tramite e-mail è un buon modo per ricevere la notifica di errori specifici.
Messaggio di errore viene inviato via e-mail
Nel seguente esempio, se si verifica un errore specifico, vi invieremo una e-mail con un messaggio di errore e terminare lo script:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "已通知网站管理员"; error_log("Error: [$errno] $errstr",1, "[email protected]","From: [email protected]"); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>
L'output del codice sopra è il seguente:
Error: [512] 变量值必须小于等于 1 已通知网站管理员
I messaggi ricevuti dal codice precedente è il seguente:
Error: [512] 变量值必须小于等于 1
Questo metodo non è adatto per tutti gli errori. error convenzionale dovrebbe essere utilizzando il sistema di registrazione PHP predefinito per la registrazione sul server.