Poznámka
:
Následující
text
platí
pro
verzi
3.0.7
a
vyšší
.
Stav
spojení
se
v
PHP
interně
sleduje
.
Jsou
tři
možné
stavy
:
Při
normálním
běhu
PHP
skriptu
je
aktivní
stav
NORMAL
.
Pokud
se
klient
odpojí
,
nastaví
se
příznak
ABORTED
.
K
odpojení
vzdáleného
klienta
typicky
dochází
,
když
uživatel
zmáčkne
tlačítko
STOP
.
Pokud
se
dosáhne
časového
limitu
(
viz
set_time_limit(
)
)
,
nastaví
se
stavový
příznak
TIMEOUT
.
Můžete
se
rozhodnout
jestli
chcete
,
aby
odpojení
klienta
způsobilo
předčasné
ukončení
vašeho
skriptu
.
Někdy
je
užitečné
nechat
skripty
doběhnout
do
konce
,
přestože
není
vzdáleného
browseru
,
který
by
přijímal
výstup
.
Výchozí
chování
je
nicméně
takové
,
že
při
odpojení
vzdáleného
klienta
dojde
k
ukončení
běhu
skriptu
.
Toto
chování
se
dá
změnit
skrze
konfigurační
direktivu
ignore_user_abort
v
php3.ini
,
odpovídající
direktivu
php3_ignore_user_abort
v
.conf
souboru
Apache
,
či
funkci
ignore_user_abort(
)
.
Pokud
nedáte
PHP
pokyn
ignorovat
odpojení
uživatele
a
ten
se
odpojí
,
váš
skript
se
ukončí
.
Výjimkou
je
,
pokud
máte
pomocí
register_shutdown_function(
)
Výjimkou
je
,
pokud
máte
pomocí
register_shutdown_function(
)
zaregistrovanou
funkci
pro
provedení
při
ukončení
skriptu
.
V
tom
případě
,
pokud
vzdálený
uživatel
zmáčkne
tlačítko
STOP
,
při
dalším
pokusu
tohoto
skriptu
odeslat
výstup
PHP
detekuje
,
že
spojení
bylo
zrušeno
,
a
zavolá
se
funkce
zaregistrovaná
pro
provedení
při
ukončení
skriptu
.
Tato
funkce
se
zavolá
také
na
konci
běhu
skriptu
končícím
normálně
,
takže
pokud
chcete
po
zrušeném
spojení
udělat
něco
jiného
,
můžete
použít
connection_aborted(
)
.
Tato
funkce
vrátí
TRUE
,
pokud
bylo
spojení
zrušeno
.
Váš
skript
může
také
ukončit
vestavěný
čítač
času
.
Výchozí
časový
limit
je
30
sekund
.
To
se
dá
změnit
max_execution_time
direktivou
v
phpš.ini
nebo
odpovídající
php3_max_execution_time
direktivou
v
.conf
souboru
Apahe
,
či
voláním
funkce
set_time_limit(
)
.
Když
čítač
času
doběhne
,
skript
se
ukončí
,
a
jako
ve
výše
uvedeném
případě
uživatelského
odpojení
,
pokud
je
zaregistrovaná
funkce
pro
provedení
při
ukončení
skriptu
,
tato
se
zavolá
.
Uvnitř
této
funkce
můžte
zkontrolovat
,
jestli
její
zavolání
způsobilo
doběhnutí
čítače
času
zavoláním
funkce
connection_timeout(
)
.
Tato
funkce
vrátí
TRUE
,
pokud
volání
funkce
registrované
pro
provedení
při
ukončení
skriptu
způsobilo
doběhnutí
čítače
času
.
Skutečností
hodnou
povšimnutí
je
,
že
stavy
ABORTED
a
TIMEOUT
mohou
být
aktivní
současně
.
Možné
je
to
v
případě
,
že
nařídíte
PHP
ignorovat
odpojení
uživatee
.
PHP
i
tak
bude
vědět
,
že
uživatel
přerušil
spojení
,
ale
skript
poběží
dál
.
Pokud
potom
dosáhne
časového
limitu
,
bude
ukončen
,
a
zavolá
se
vaše
funkce
pro
provedení
při
ukončení
skriptu
,
pokud
existuje
.
V
tomto
okamžiku
zjistíte
,
že
jak
connection_timeout(
)
,
tak
connection_aborted(
)
vracejí
TRUE
.
Oba
stavy
můžete
zkontrolovat
jediným
voláním
funkce
connection_status(
)
.
Tato
funkce
vrací
bitové
pole
aktivních
stavů
.
Takže
například
,
pokud
jsou
aktivní
oba
tyto
stavy
,
vrátí
3
.