SORU
30 EYLÜL 2010, PERŞEMBE


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
22 Ocak 2013, Salı


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • David Wills

    David Wills

    31 Aralık 2007
  • My name is Festis and I'm free

    My name is F

    2 EKİM 2011
  • UCBerkeley

    UCBerkeley

    3 Mayıs 2006