Nota: Todo lo siguiente se aplica a partir de la versión 3_0_7 y posterior_
Internamente en PHP se mantiene el estado de la conexión_ Hay 3 posibles
estados:
Cuando un script PHP se está ejecutando se activa el estado NORMAL_
Si el cliente remoto se desconecta, se pasa al estado ABORTED_ Esto
suele ocurrir cuando el usuario pulsa en el botón STOP del navegador_
Si se alcanza el límite de tiempo impuesto por PHP (ver
set_time_limit()), se pasa al estado TIMEOUT_
Puedes decidir si quieres que la desconexión de un cliente cause que tu
script sea abortado_ Algunas veces es cómodo que tus scripts se ejecuten
por completo, incluso si no existe ya un navegador remoto que reciba la
salida_ El comportamiento por defecto es sin embargo, que tu script se
aborte cuando el cliente remoto se desconecta_ Este comportamiento puede
ser configurado vía la directiva ignore_user_abort en el fichero php3_ini,
o también con la función ignore_user_abort()_ Si no le
espeficicas al PHP que cuando un usuario aborte lo ignore, tu script terminará
su ejecución_ La única excepción es si tienes registrada un función de
desconexión usando la función register_shutdown_function()_
Con una función de desconexión, cuando un usuario remoto pulsa en el botón
STOP, la próxima vez que tu script intenta mostrar algo, PHP detecta que
la conexión ha sido abortada y se llama a la función de desconexión_ Esta
función de desconexión también se llama al final de la ejecución de tu
script cuando se ha ejecutado normalmente, de manera que si quieres hacer
algo diferente en caso de que un cliente se haya desconectado, puedes usar
la función connection_aborted()_ Esta función devuelve
TRUE si la conexión fue abortada_
Vuestro script también se puede terminar por un temporizador interno_
El timeout por defecto es de 30 segundos_ Se puede cambiar usando
la directiva max_execution_time en el fichero php_ini o la correspondiente
directiva php_max_execution_time en la configuración del servidor de páginas
Apache, como también con la función set_time_limit()_ Cuando
el temporizador expira, el script se aborta como en el caso de la desconexión
del cliente, de manera que si se ha definido una función de desconexión,
esta se llamará_ Dentro de esta función de desconexión, puedes comprobar
si fue el timeout el que causó que se llamara a la función de desconexión,
llamando a la función connection_timeout()_ Esta función
devolverá verdadero si el timeout causa que se llame a la función de
desconexión_
Hay que destacar que ambos, el estado ABORTED y el TIMEOUT, se pueden
activar al mismo tiempo_ Esto es posible si le dices a PHP que ignore
las desconexiones intencionadas de los usuarios_ PHP aún notará el hecho
de que el usuario puede haberse desconectado, pero el script continuará
ejecutándose_ Si se alcanza el tiempo límite de ejecución será abortado
y, si se ha definido una función de desconexión, esta será llamada_ En
este punto, encontrarás que las funciones connection_timeout()
y connection_aborted() devuelven verdadero_ Puedes
comprobar ambos estados de una manera simple usando la función
connection_status()_ Esta función devuelve un campo de bit de los
estados activos_ De este modo, si ambos estados están activos devolvería
por ejemplo un valor 3_