HTTP yanıtı gönderdikten sonra PHP yürütülmesine devam
Nasıl PHP 5.2 (çalışan olarak apache mod_php) istemci için tam bir HTTP yanıtı göndermek, ve bir dakika daha infaz işlemleri devam o zaman alabilir miyim?
Uzun hikaye:
45 ila 60 saniye sürer birkaç uzun bir veritabanı istekleri yürütmek ve e-posta göndermek için bir PHP komut dosyası var. Bu script üzerinde hiçbir kontrolü yoktur bir uygulama olarak adlandırılır. Uygulama herhangi bir hata iletisi PHP script (çoğunlukla geçersiz parametre hataları) alınan rapora ihtiyacım var.
Uygulama zaman aşımı gecikme 45 saniye (tam değeri bilmiyorum) daha kısa olan ve bu nedenle bir hata olarak PHP komut her icra kaydeder. Bu nedenle, gerek PHP göndermek için, tam bir HTTP yanıtı istemciye olabildiğince hızlı (ideal olarak, giriş parametreleri doğrulanmış oldu) ve veritabanı ve e-posta işleme.
pcntl_fork
kullanılabilir durumda değilse, mod_php, koşuyorum. Verileri veritabanına işlenecek kaydederek olayları bu şekilde çalışır ve cron
, gerçek süreci kaçabilirim ama daha kısa bir çözüm arıyorum.
CEVAP
Vardı bu parçasında benim "özel komut" araç, ama kayboldum (bulutlar yaygın değildi o zamanlar), o yüzden ben aramak için geldi bu soru, gördüğüme şaşırdım o eksik, aradım daha geldi buraya post:
<?php
ob_end_clean();
header("Connection: close");
ignore_user_abort(); // optional
ob_start();
echo ('Text the user will see');
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush(); // Strange behaviour, will not work
flush(); // Unless both are called !
session_write_close(); // Added a line suggested in the comment
// Do processing here
sleep(30);
echo('Text user will never see');
?>
Ben aslında birkaç yerlerde kullanın. Bir banklink başarılı bir ödeme isteği veriyor ve hizmetleri bir çok arama ve bu olduğunda çok miktarda veri işlemek için var. ve bence çok anlamlı: Bazen fazla 10 saniye alır, banklink sabit bir zaman aşımı süresi vardır. Bu banklink kabul ediyorum ve ona yolu gösterin, ve zaten o gidince benim için bir şeyler yap.
HTTP yanıtı kaynak zaten var YAZI için...
İşleme hizmetinde $http yanıtı...
Neden Internet Explorer hatasından son...
HTTP tespit veya JavaScript HTTPS forc...
Unicorn çıkış VADELİ yakalama ve gönde...