Internamente il PHP mantiene lo stato della connessione. Si hanno 3 possibili stati:
Quendo uno script PHP viene eseguito normalmente si trova nello stato NORMAL. Se il client remoto si disconnette viene attivato il flag ABORTED. La disconnessione di un client remoro è generalmente causata dalla pressione del tasto STOP da parte dell'utente. Se invece si raggiunge il limite di tempo imposto dal PHP (vedere set_time_limit()) si attiva lo stato TIMEOUT.
Si può decidere se la disconnessione del client debba fare
interrompere lo script o meno. In certi casi è più pratico lasciare
finire lo script anche se non c'è più il browser remoto a ricevere
i dati. Tuttavia il comportamento di default è di interrompere
lo script quando il client remoto si disconnette. Questo comportamento può
essere impostato tramite la direttiva di php.ini ignore_user_abort oppure tramite
la corrispondente direttiva php_value ignore_user_aborti
del file httpd.conf di Apache
oppure con la funzione ignore_user_abort().
Se non si segnala al PHP di ignorare la disconssessione dell'utente lo
script sarà interrotto. Unica eccezione si ha con la registrazione di una funzione
di chiusura utilizzando register_shutdown_function().
Con una funzione di shutdown, quando l'utente remoto preme il bottone di STOP,
alla prima occasione in cui lo script tenterà di produrre un output, il PHP intercetterà
che la connessione è interrotta e richiamerà la funzione di shutdown.
Questa funzione sarà richiamata anche al normale termine dello
script, pertanto per eseguire passi differenti in caso di disconnessione
del client occorre utilizzare la funzione connection_aborted().
Questa funzione restituisce TRUE
se la connessione è stata
interrotta.
Uno script può essere fermato dal timer incorporato nel PHP. Per default il timeout è impostato a 30 secondi. Tale limite può essere variato agendo sulla direttiva max_execution_time nel php.ini o nel corrispondente parametro php_value max_execution_time nella configurazione di Apache, oppure con la funzione set_time_limit(). Quando termina il tempo impostato lo script viene interrotto, se è stata prevista una funzione di shutdown, questa verrà eseguita. All'interno di questa funzione si può discriminare se è stata attivata per lo scadere del timeout utilizzando la funzione connection_timeout(). Questa restituisce 2 se la funzione di shutdown è stata chiamata per lo scadere del tempo a disposizione.
Un aspetto che occorre notare sui stati ABORTED e TIMEOUT è che possono essere attivi contemporaneamente. Questo può accadere se si è impostato il PHP affinchè ignori le interruzioni da parte dell'utente. Infatti il PHP continua a tenere traccia della disconnessione dell'utente, ma, semplicemente, non viene interrotto lo script. Quindi, quando termina il tempo, lo script sarà interrotto e verrà richiamata la funzione di shutdown, se presente. In questa situazione si avrà che connection_status() restituirà 3.