Set_time_limit (0) ayarlanmış olsa bile, PHP komut kesebilirler?

2 Cevap

Ben çok garip bir hata gibi görünen izini çalışıyorum. Ben şöyle kabaca şekilde yapılandırılmış bir uygulama var:

set_time_limit(0);
register_shutdown_function('logScriptCompletion');

function logScriptCompletion() {
   log('script completed');
}

log('script started');

// do some calculations periodically printing out progress

Komut çalıştırmak için bir süre alabilir. Durdurma düğmesi vurmak veya bağlantısı kesildiğinde bile komut sonuna işlem devam etmek için istenen davranıştır. 99 beklendiği gibi çalışır zaman%.

Arada bir (belki bin istekleri Birkaç ayda / çift) hesaplama tüm yol geçmiyor ama "komut başladı" ve "tamamlandı script" kaydedilir ve aksi takdirde ölümcül veya başka hiçbir hata (Ben açıktır hem tam günlük) sağladı.

Ben bu bırakılan sunucuya bir bağlantı ile ilgili bir şey olabilir bir şüphe var ama onaylamak için hiçbir somut delilin var. Linux üzerinde Apache 2/PHP 5.2.6 çalıştırıyorum.

Başkasının benzer bir sorunu gördü ve bu ışık döken yardımcı olabilir?

2 Cevap

Kesinlikle! Ayrıca use the ignore_user_abort() function emin olmalıdır.

Bir fikir olarak, ben bazen bir düzenli olarak cron işinden php komut satırı sürümünü kullanıyor gibi komut dosyalarını çalıştırmak için iyi bir fikir olduğunu düşünüyorum. (Httpd nedense yeniden Aksi takdirde, işleme, vb sonlandırılacak)

Bu nedenle, size (örneğin bir veritabanı tablosundaki) bir arka plan işleme işi çalıştırmak ve işlenecek herhangi bir veri yüklemek gerekir gerçeğini oturum web sitesini kullanmak istiyorum. Cron idam PHP komut dosyası daha sonra yürütme başladı kez-ilerleme olarak iş işaretleme, veritabanındaki herhangi bekleyen işler için kontrol edin ve ardından web sitesi okuyabilir veritabanı tablosundaki bir 'tamamlanma yüzdesi' alanını, güncelleştirmek - dolayısıyla ilerleme kullanıcıyı bilgilendirmek.

Işlem tamamlandığında, PHP istenirse, vb işleme gibi iş işaretleme ve kullanıcı e-posta, buna veritabanını güncellemek istiyorum

NB: Bu yararlı dolayısıyla trivially vb zaman, uzun bir süre çalışan edilmiştir işler olup olmadığını görmek için kontrol bir araç sağlayarak, başlangıç ​​ve işleme bitirmek için bazı temel datetime alanları ekleyerek bu yaklaşımı uzatabilirsiniz