1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
<?xml version="1.0" encoding="iso-8859-1"?>
<chapter id="features.connection-handling">
<title>Manejando conexiones</title>
<note>
<para>Todo lo siguiente se aplica a partir de la 3.0.7 y posterior.</para>
</note>
<para>
Internamente en PHP se mantiene el estado de la conexión. Hay 3 posibles
estados:
<itemizedlist>
<listitem><simpara>0 - NORMAL</simpara></listitem>
<listitem><simpara>1 - ABORTED (Abortado)</simpara></listitem>
<listitem><simpara>2 - TIMEOUT (Fuera de tiempo)</simpara></listitem>
</itemizedlist>
</para>
<simpara>
Cuando un script PHP se está 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 botón STOP del navegador.
Si se alcanza el límite de tiempo impuesto por PHP (ver <function>
set_time_limit</function>), se pasa al estado TIMEOUT.</simpara>
<simpara>
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 <function>ignore_user_abort</function>. 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 <function>register_shutdown_function</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 <function>connection_aborted</function>. Esta función devuelve
verdadero si la conexión fue abortada.</simpara>
<simpara>
Tu 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 php3.ini o la correspondiente
directiva php3_max_execution_time en la configuración del servidor de páginas
Apache, como también con la función <function>set_time_limit</function>. 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 <function>connection_timeout</function>. Esta función
devolverá verdadero si el timeout causa que se llame a la función de
desconexión.</simpara>
<simpara>
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 <function>connection_timeout</function>
y <function>connection_aborted</function> devuelven verdadero. Puedes
comprobar ambos estados de una manera simple usando la función <function>
connection_status</function>. 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.</simpara>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->
|