Kapitola 20. Obsluha spojení

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 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 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 .