gratiszona

conexiones

Internamente en PHP se mantiene el estado de la conexion. Hay 3 posibles estados:
0 - NORMAL
1 - ABORTED (Abortado)
2 - TIMEOUT (Fuera de tiempo)
Cuando un script PHP se esta ejecutando se activa el estado NORMAL. Si el cliente remoto se desconecta, se pasa al
estado ABORTADO. Esto suele ocurrir cuando el usuario pulsa en el boton STOP del navegador. Si se alcanza el limite de
tiempo impuesto por PHP (ver set_time_limit()), se pasa al estado TIMEOUT.
Puedes decidir si quieres que la desconexion de un cliente cause que tu script sea abortado. Algunas veces es comodo 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 via la directiva ignore_user_abort en el fichero php3.ini, o tambien con la funcion ignore_user_abort(). Si no
le espeficicas al PHP que cuando un usuario aborte lo ignore, tu script terminara su ejecucion. La unica excepcion es si
tienes registrada un funcion de desconexion usando la funcion register_shutdown_function(). Con una funcion de
desconexion, cuando un usuario remoto pulsa en el boton STOP, la proxima vez que tu script intenta mostrar algo, PHP
detecta que la conexion ha sido abortada y se llama a la funcion de desconexion. Esta funcion de desconexion tambien se
llama al final de la ejecucion 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 funcion connection_aborted(). Esta funcion
devuelve verdadero si la conexion fue abortada.
Tu script tambien 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 php3.ini o la correspondiente directiva
php3_max_execution_time en la configuracion del servidor de paginas Apache, como tambien con la funcion
set_time_limit(). Cuando el temporizador expira, el script se aborta como en el caso de la desconexion del cliente, de
manera que si se ha definido una funcion de desconexion, esta se llamara. Dentro de esta funcion de desconexion, puedes
comprobar si fue el timeout el que causo que se llamara a la funcion de desconexion, llamando a la funcion
connection_timeout(). Esta funcion devolvera verdadero si el timeout causa que se llame a la funcion de desconexion.
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 aun notara el hecho de que el usuario
puede haberse desconectado, pero el script continuara ejecutandose. Si se alcanza el tiempo limite de ejecucion sera
abortado y, si se ha definido una funcion de desconexion, esta sera llamada. En este punto, encontraras que las funciones
connection_timeout() y connection_aborted() devuelven verdadero. Puedes comprobar ambos estados de una manera
simple usando la funcion connection_status(). Esta funcion devuelve un campo de bit de los estados activos. De este
modo, si ambos estados estan activos devolveria por ejemplo un valor 3.
Anterior: enviar archivos con php
Siguiente: conexiones persistentes en php