Kapitola 21. 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 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() 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.