PHP kézikönyv
Előző
Következő
Megjegyzés:
Az alábbi fejezetek csak a PHP 3.0.7-es és későbbi verzióira vonatkoznak!
A PHP belsőleg nyilvántartja a kapcsolati státuszt.
Három lehetséges állapot van:
0 - NORMAL (Normál)
1 - ABORTED (Megszakított)
2 - TIMEOUT (Időtúllépéses)
Amikor egy PHP szkript fut, alapállapotban a NORMAL állapot aktív.
Ha a távoli kliens bontja a kapcsolatot, az ABORTED statátusz jelzése lesz aktív.
Ez tipikusan akkor áll elő, ha a látogató a STOP gomb-ot használja a böngészőjében.
Ha a PHP által felügyelt időkorált kerül túllépésre (lásd a set_time_limit() függvényt), a TIMEOUT állapot válik aktívvá.
Eldöntheted, hogy ha a kliens bontja a kapcsolatot, a szkript is leálljon-e vagy sem.
Néha hasznos lehet, ha a szkriptjeid mindig végigfutnak, annak ellenére, hogy a kliens már nem fogadja a kimenetet.
Alapbeállításban azonban a szkript is befejezi a futását, ha a kliens bontja a kapcsolatot.
Ez a viselkedés az ignore_user_abort php.ini beállítással, valamint az ennek megfelelő "php_value ignore_user_abort" Apache .conf direktívával állítható, vagy az ignore_user_abort() függvénnyel.
Ha nem konfigurálod úgy a PHP-t, hogy hagyja figyelmen kívül a kliens kapcsolatbontását, a szkriptjeid le fognak állni ilyen esetekben.
Egyetlen kivétel ez alól, ha egy 'shutdown' függvényt definiálsz a register_shutdown_function() -al.
Egy ilyen beállítással, ha a látogató lenyomja a STOP gombot, a szkripted következő kimenet-küldési kísérletére a PHP a 'shutdown' függvényt fogja meghívni.
A 'shutdown' függvény abban az esetben is meghívásra kerül, ha a szkript normálisan befejezi a futását, tehát ha valami speciálisat szeretnél tenni, amikor a kliens bontja a kapcsolatot, a connection_aborted() függvényt használhatod.
Ez igazat fog visszaadni, ha a kapcsolatot a kliens bontotta.
A szkripted a belső időmérés következtében is megállhat.
Alapbeállításban egy szkript maximum 30 másodpercig futhat.
Ez megváltoztatható a max_execution_time php.ini direktívával, illetve a megfelelő "php_value max_execution_time" Apache .conf beállítással, valamint a set_time_limit() függvénnyel.
Amikor ez az idő letelik, a szkript megáll, és ha a fenti esetben említett 'shutdown' függvény definiált, az kerül meghívásra.
Az időtúllépés esetét a connection_timeout() függvényel állapíthatod meg.
Ez igazat fog visszaadni, ha időtúllépés miatt hívódott meg a 'shutdown'.
Fontos megjegyezni, hogy az ABORTED és TIMEOUT állapotok egyszerre is aktívak lehetnek, ha a PHP-ben a kliens kapcsolatbontásának figyelmen kívül hagyását kérted.
A PHP tudni fogja, hogy a kliens már bontotta a kapcsolatot, de a szkript futni fog tovább.
Ha ráadásul eléri az időkorlátot, a szkript megáll, és a 'shutdown' függvény hívódik meg (ha beállítottál ilyet).
Ezen a ponton azt fogod tapasztalni, hogy mind a connection_timeout(), mind a connection_aborted() igazat ad.
Mindkettőt ellenőrizheted, ha a connection_status() függvényt hívod.
Ez egy bitmezőt ad vissza, az aktív állapotokkal.
Tehát ebben az esetben, mivel mindkét állapot aktív, 3-at fogsz visszakapni.
Előző
Tartalom
Következő
Távoli állományok kezelése
Fel
Állandó adatbázis kapcsolatok