Bir PHP komut dosyası kendisini iptal veya kürtaj algılayabilir miyim?

5 Cevap php

PHP betikleri continue executing after the HTTP page request, bu yüzden nasıl nihayet ben onunla işim bittiğinde onu yürütme durdurmak yapabilirim?

Ayrıca, işletim zorla senaryoyu iptal gidiyor algılamak için bir olay var mı? ya da nasıl bir iç zamanlayıcı tahmin duruyorsun max_execution_time?

5 Cevap

exit()/die() bir php script duracaktır.

Senaryoyu ne zaman duracağını bilmek için, sadece maksimum yürütme süresini bir zamanlayıcı olarak microtime kullanmak ve tasarruf sabit olarak (veya php.ini dosyasından almak) gerekir.

Ayrıca Connection handling bilgilere bakabilirsiniz. Biz connection_aborted() ve connection_status() gibi şeyler var burada

Ama sen çözmeye çalışıyoruz sorun ne?

Isteğiniz kapatılıyor anda bir geri arama kullanmak için register_shutdown_function( myfunction ).

Çok çoğu POSIX ortamlar gibi, PHP de destekler signal handlers. Sen SIGTERM olay için kendi işleyicisi kaydedebilirsiniz.

function my_abort_handler( $signo ) {
   echo "Aborted";
}

pcntl_signal( SIGTERM, "my_abort_handler" );

Sen pcntl-alarm, bir komut dosyası kendisi için bir sinyal göndermek için olanak bakmak isteyebilirsiniz. Ayrıca OS tarafından göndermek olabilir öldürmek sinyallerini yakalamak için bazı örnek içerir. Ve gerçekten () ölür.

Eh, bir $start=microtime(true), bir zaman damgası dönecekleri başlayabilirsiniz. Sonra sadece microtime(true) kontrol etmek ve yürütme beri saniye numarasını almak için start zaman olduğunu çıkarabilirsiniz.

Ama hayır, "yakalamak" komut olamaz istek çok uzun olma nedeni için sonlanan gibi. Sen kapatma işleyicisi bazı son dakika şeyler yapmak için deneyebilirsiniz, ama ben PHP bu onur olacaktır emin değilim.

Orada, connection_timeout() istediğinizi tam olarak ne yapar bir işlev olarak kullanılan, ancak önerilmemektedir ve kaldırıldı gibi görünüyor. Bunun için yerine her türlü varsa ancak, bilmiyorum.