La gestione degli errori
Ogni programmatore deve confrontarsi con un problema quas
i "fisiologico" alla programmazione: la possibilità di commettere degli errori. Dal punto di vista del codice esistono due tipi di errore:
- L'errore di sintassi.
- L'errore logico.
Quando PHP incontra un errore, se configurato in tal proposito, restituisce una stringa contente il tipo di errore, il nome del file nel quale si è riscontrato e la linea. Questo aiuta moltissimo lo sviluppatore a individuare il tipo di errore ed il punto preciso dove si è riscontrato.
La gestione degli errori in PHP
Per quello che riguarda gli errori di sintassi l'interprete PHP presenta a schermo gli errori che incontra e, in base alla loro gravità, interrompe o prosegue il parsing dello script. In PHP ci sono differenti livelli di errore ma i principali sono tre: notice, warning, fatal. Ovviamente esiste la possibilità di impostare che tipo di errore deve essere mostrato o, in alternativa, non mostrare alcun errore.Il notice, come il nome stesso suggerisce, rappresenta quel tipo di errore che di per sé è lieve, ad esempio un array usato senza che queste esista. Visto che può portare ad errori imprevisti il programmatore potrebbe essere avvantaggiato nella correzione dei bug leggendo i notice.
Il warning è un errore intermedio in una scala di rilevanza. Con la presenza di questo tipo di errore non viene interrotta l'esecuzione dello script ma il programmatore trae vantaggio dal sapere che un errore che potrebbe avere effetti imprevisti sul codice è stato rilevato nel codice
L'errore di tipo fatal è quell'errore che impedisce a PHP di continuare l'interpretazione del sorgente. Gli errori fatal sono molto comuni e, ovviamente, abbastanza noiosi da affrontare. Alcuni esempi di errori di questo tipo sono quelli nei quali il programmatore richiama una funzione non esistente, ad esempio:
<?php CaricaConfigurazione(); // La funzione non esiste, viene restituito un errore di tipo fatal ?>
Abilitare e disabilitare l'error reporting
PHP mette a disposizione la funzione error_reporting(livello) mediante la quale si istruisce il compilatore a mostrare, o non mostrare, le tipologie di errore che abbiamo appena analizzato. Per determinare il livello esistono molte costanti da utilizzare, nel nostro caso esamineremo le cinque più significative:| Costante | Descrizione |
| E_ERROR | Tutti gli errori di tipo fatal. |
| E_WARNING | Tutti i warnings. |
| E_PARSE | Tutti gli errori di sintassi. |
| E_NOTICE | Tutti gli errori di tipo notice |
| E_ALL | Tutti gli errori, a prescindere dal tipo. |
Ad esempio le volessimo mostrare tutti gli errori useremo questo codice:
<?php error_reporting(E_ALL); $eventi[1] = 'appuntamento'; $eventi[2] = 'riunione'; echo $eventi[3]; // Non esiste, mostra un notice ?>
Se volessimo mostrare tutti gli errori di tipo fatal e warning ma non i notice useremo questo codice:
<?php
error_reporting(E_ALL ^ E_NOTICE);
$eventi[1] = 'appuntamento';
$eventi[2] = 'riunione';
echo $eventi[3]; // Non viene mostrato alcun errore
include('file_non_esistente.php'); // Il file non esiste, viene riportato un warning
$oggetto->test() // Non esiste l'oggetto $oggetto, viene riportato un errore di tipo fatal
?>
Alcuni consigli
La visualizzazione degli errori è di fondamentale importanza per il programmatore che, in questo modo, può essere informato di imperfezioni del codice ma, allo stesso tempo, rappresenta un potenziale pericolo di sicurezza. Un utente malintenzionato potrebbe sfruttare le informazioni contenute nel messaggio di errore per condurre un attacco contro il sito che, ovviamente, si traduce in perdite di tempo e potenziali fughe di dati personali. Per questo motivo è consigliabile non mostrare gli errori nei siti pubblicati su internet ma fare in modo che questi vengano visualizzati soltanto negli ambienti di produzione o debug. Fin quando il sito viene eseguito sulla macchina dello sviluppatore non ci sono problemi a vedere gli errori ma quando questo viene eseguito ed è visibile da tante persone, e dai motori di ricerca, allora potrebbero esserci dei problemi.Successivo: Apache
Precedente: Leggere e scrivere dai files