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
.