DISPLAY ERRORS ED ERROR REPORTING

error_reporting(E_ALL & ~E_WARNING);
È buona pratica sia in sviluppo che in produzione lasciare E_ALL. in modo da visualizzare tutto. Riporto l’immagine del file di log su XAMPP, se error_reporting è impostato a E_ALL gli errori vengono scritti in questo file. Viceversa, se impostato a 0 gli errori non vengono registrati nel file.

FILE DI ERRORE PERSONALIZZATO CON LA DIRETTIVA ERRORLOG
Non è buona norma utilizzare un unico file di log per tutte le applicazioni. Possiamo però definire un file di log specifico per la nostra applicazione. In questo momento il file di log si trova nella posizione su windows c:\xampp\apache\logs. Per creare un file di log per la nostra applicazione dobbiamo definire una direttiva all’interno del nostro virtual host. A breve spiegherò cos’è un virtual host, al momento però creiamo un file di log per l’applicazione. Modifichiamo la struttura di base delle cartelle mettendo tutto il contenuto dentro un folder public_html. Ora vogliamo che questa cartella sia la document root dell’applicazione. Modifichiamo il virtual host come segue:

Con le direttive ErrorLog e CustomLog quando riavviamo apache verranno creati due file il cui percorse è quello specificato nel virtual host.
IL FILE HTACCESS
Affinché venga scritto il file di log dell’applicazione, dobbiamo creare un file .htaccess e inserire le seguenti righe.

Se ora proviamo a fare una richiesta al file tmp.php con all’interno una variabile non dichiarata, il warning verrà riportato nel file ErrorLog dell’applicazione e la richiesta tracciata nel file request.log.
CONFIGURAZIONE DELL’HOST VIRTUALE
Come sappiamo nelle rete internet ad ogni dispositivo è associato un indirizzo IP, in questo modo possiamo effettivamente raggiungere ogni dispositivo nella rete. Però se un server avesse un singolo indirizzo IP vorrebbe dire che quel server può ospitare un solo sito web al suo interno. Nella realtà non è così perché un server può ospitare decine di siti web. Per farlo vengono utilizzati i virtual host. Il primo passo è la creazione del Virtual Host in Apache. Cerchiamo il file httpd-vhosts.conf, che dovrebbe trovarsi all’interno della cartella
<Installazione di XAMPP>\apache\conf\extra
e facciamone una copia di backup per sicurezza (chiamandola ad esempio httpd-vhosts.original.conf). Dopodiché apriamo il file con un editor qualsiasi (su Windows consigliamo Notepad++) e scommentiamo la riga
NameVirtualHost *:80
in questo modo abilitiamo il riconoscimento degli host virtuali in base al nome presente nell’URL, ovvero in base al nome del dominio (in questo caso virtuale). Alla fine del file inseriamo invece le righe:
<VirtualHost *:80>
ServerName localhost
DocumentRoot “C:\xampp\htdocs“
</VirtualHost>
<VirtualHost *:80>
ServerName maestrophp.local
DocumentRoot “C:/xampp/htdocs/corsi/php/public_html“
</VirtualHost>
La prima sezione dice ad Apache di continuare a lavorare come prima quando scriviamo http://localhost nel browser: Qualsiasi richiesta che arriva sulla porta 80 la DocumentRoot è C://xampp/htdocs associata a localhost. Se omettiamo questa sezione non vedremo più le pagine di cui è stato fatto il deploy nella cartella htdocs. La seconda sezione è quella che ci interessa, serve ad associare l’host virtuale maestrophp.local alla cartella locale C:/xampp/htdocs/corsi/php/public_html. Indicando la direttiva ServerName = maestrophp.local vuol dire che quando digitiamo all’interno del browser http://maestrophp.local vogliamo accedere alla sua DocumentRoot.
CONFIGURAZIONE DEL FILE HOST
La modifica vista sopra è sufficiente per creare un host virtuale, in questo caso maestrophp.local. Rimane però una cosa da fare, il browser non sarà capace di raggiungere l’Apache locale. Il modo più semplice di costringere la nostra macchina (e solo lei) a raggiungere l’Apache locale è tramite il file hosts, che su Windows dovrebbe trovarsi qui
C:\WINDOWS\system32\drivers\etc\hosts
apriamo il file con i permessi di amministratore e inseriamo la riga
127.0.0.1 maestrophp.local
L’istruzione dirà a Windows che qualunque richiesta verso l’host maestrophp.local va risolta sull’indirizzo IP 127.0.0.1, ovvero quello della nostra macchina locale. Questo è tutto. Dopo aver riavviato Apache, ogni volta che scriveremo http://maestrophp.local vedremo le pagine dell’Apache locale. Il file hosts riguarda il comportamento del sistema operativo, non gli applicativi installati sulla macchina (come ad esempio Apache).
GESTIONE PERSONALIZZATA ERRORI
Gli errori generati da PHP possono essere errori fatali che terminano lo script ed errori che non terminano lo script, come ad esempio i warnings, gli informativi e così via. Gli errori possono avvenire in fase di compilazione e in fase di esecuzione. Non tutti gli errori sono gestibili. Se importiamo uno script inesistente avremo un errore fatale. Facciamo ad esempio l’echo di un valore, proviamo a importare uno script non esistente e infine facciamo l’echo di un secondo valore:
echo 1;
require ‘abc.php’;
echo 2;
Visualizziamo il valore 1, poi c’è l’errore fatale che termina lo script e non visualizziamo il valore 2. Se invece facciamo un errore di sintassi, ad esempio omettiamo il punto e virgola sul secondo echo, allora visualizziamo solo un errore fatale essendo generato in fase di compilazione, quindi un errore che previene l’esecuzione del codice. Possiamo definire un nostro sistema personalizzato di gestione degli errori, e lo facciamo attraverso l’invocazione di una funzione set_error_handler. Dobbiamo passare a questa funzione due valori, il primo riguarda la funzione o callback che gestirà l’errore, e come secondo parametro il tipo di errori che vogliamo gestire.
set_error_handler(‘errorHandler‘,E_ALL);
Se andiamo nel file di log, vedremo che l’errore non viene scritto in quanto lo abbiamo gestito nel codice. Se vogliamo scrivere l’errore nel file di log utilizziamo la funzione error_log();

Anziché utilizzare le funzioni e una programmazione procedurale, possiamo usare le classi. Facciamo però attenzione al fatto che non tutti gli errori sono gestibili in modo personalizzato, ovvero se ad esempio dopo l’echo facciamo il require di uno script non esistente abbiamo un errore fatale.

Lascia un commento