PHP içinde yerleşik olarak bağlantı durumu saklanır. Olası 4 durum vardır:
PHP betiği normal olarak çalıştığında, NORMAL durumu etkindir. Eğer uzak istemci bağlantıyı keserse ABORTED durumu etkin olur. Uzak istemci bağlantı kesilmesi genellikle kullanıcının DUR düğmesine basmasından kaynaklanır. Eğer PHP tarafından bir zaman sınırı (set_time_limit() işlevine bakınız) tetiklendiyse, TIMEOUT durumu etkin olur.
Kullanıcının bağlantı kesmesiyle betiğinizin iptal edilip edilmeyeceğine
karar verebilirsiniz. Bazen uzak tarayıcı çıktıyı almasa da betiğinizin
işini bitirinceye kadar çalışmasını gerektiren durumlar olabilir. Öntanımlı
davranış uzak istemci bağlantıyı kestiğinde betik çalışmasının iptal
edilmesidir. Bu davranış şekli ignore_user_abort
php.ini yönergesi veya ona ilişkin
php_value ignore_user_abort Apache httpd.conf
yapılandırma yönergesi veya ignore_user_abort() işlevi ile
belirlenebilir. Eğer PHP'ye kullanıcı iptallerini gözardı etmesini
söylemezseniz ve kullanıcı iptal ederse betiğiniz sonlanır. Tek istisnası
register_shutdown_function() işleviyle kapatma işlevinin
kayıtlanmasıdır. Bir kapatma işlevi ile, uzak kullanıcı DUR düğmesine
bastığında, betiğinizin sonraki çıktılama denemesinde PHP bağlantının iptal
edildiğini tespit eder ve kapatma işlevi çağrılır. Bu kapatma işlevi ayrıca
normal olarak sonlandırmada betiğinizin sonunda çağrılacaktır, istemci
tarafından bağlantı iptalinde farklı birşey yapmak için
connection_aborted() işlevini kullanabilirsiniz. Eğer
bağlantı iptal edilirse bu işlev TRUE
döndürecektir.
Betiğinizi yerleşik betik zamanlayıcı ile de sonlandırabilirsiniz.
Öntanımlı zaman aşımı 30 saniyedir. Bu max_execution_time
php.ini yönergesi veya ilişkili php_value
max_execution_time Apache httpd.conf yapılandırma yönergesi veya
set_time_limit() işlevi ile değiştirilebilir. Zaman
aşımında betik iptal edilir ve yukarıdaki istemci bağlantı kesilmesindeki
gibi, eğer kayıtlı bir kapatma işlevi varsa çağrılır. Bu kapatma işlevi
içinde connection_status() işlevi ile kapatma işlevinin
zaman aşımı nedeniyle mi çağrıldığını denetleyebilirsiniz. Kapatma
işlevinin çağrılmasına zaman aşımı neden olduysa bu işlev 2 döndürür.
ABORTED ve TIMEOUT durumlarının aynı zamanda etkin olabileceğine dikkat edilmesi gerekir. Eğer PHP'ye kullanıcı iptallerini gözardı etmesini söylediyseniz bu mümkündür. PHP kullanıcının bağlantıyı koparmış olabileceğini bilir, fakat betik çalışmaya devam eder. Eğer zaman sınırına ulaşırsa çalışması iptal edilir ve kapatma işleviniz varsa çağrılır. Bu noktada connection_status() işlevinin 3 döndürdüğünü göreceksiniz.