Problem
I have a form that, when submitted, will run basic code to process the information submitted and insert it into a database for display on a notification website. In addition, I have a list of people who have signed up to receive these notifications via email and SMS message. This list is trivial as the moment (only pushing about 150), however it's enough to cause it takes upwards of a minute to cycle through the entire table of subscribers and send out 150+ emails. (The emails are being sent individually as requested by the system administrators of our email server because of mass email policies.)
Bu süre boyunca, uyarı yayınlanmıştır bireyin bildirim yayınlanmadan herhangi bir pozitif takviye olmadan neredeyse bir dakika için formun son sayfasında oturmak olacaktır. Bu diğer potansiyel sorunlara yol açar, ben hissediyorum olası çözümler var hepsi ideal daha azdır.
Birincisi, afiş, sunucu kaldığını düşünebilir ve komut dosyası yeniden başlamak veya iki kez çalıştırmak için neden tekrar 'Gönder' butonuna tıklayın. Ben kullanıcı hala komut yürütme uzunluğu sayfada sıkışmış olacak çünkü ancak bu idealden daha az olduğu, düğmesini devre dışı ve 'İşlemeye ... "gibi bir şey söylemek metni değiştirmek için JavaScript kullanarak bu çözebilir. (JavaScript devre Ayrıca, eğer, bu sorun hala var.)
İkinci olarak, afiş erken formu gönderdikten sonra sekme veya tarayıcıyı kapatın olabilir. Geri tarayıcıya yazmaya çalışır kadar komut kullanıcı daha sonra herhangi bir bizim etki alanı içindeki sayfa (komut dosyası hala çalışırken) gözatarsa komut sona erinceye kadar, ancak tarayıcı sayfa yükleme asılı, sunucu üzerinde çalışan tutmak olacaktır . (Tarayıcı bir sekme veya pencere kapatıldığında bu sadece olur değil bütün tarayıcı uygulaması.) Yine de, bu ideal daha azdır.
(Possible) Solution
I've decided I want to break out the "email" part of the script into a separate file I can call after the notification has been posted. I originally thought of putting this on the confirmation page after the notification has been successfully posted. However, the user will not know this script is running and any anomalies will not be apparent to them; This script cannot fail.
Ama, ne bir arka plan işlemi olarak bu komut dosyasını çalıştırın eğer? Yani benim soru şudur: Nasıl bir PHP komut yürütebilirsiniz bir arka plan servisi olarak tetikleyebilir ve kullanıcı form düzeyinde yaptıklarından tamamen bağımsız çalıştırmak için?
EDIT: Bu cannot cron'ed edilebilir. Bu form gönderildiğinde anlık çalıştırmanız gerekir. Bu yüksek öncelikli bildirimleri bulunmaktadır. Buna ek olarak, bizim sunucuları çalıştıran sistem yöneticilerinin daha sık 5 dakikadan fazla herhangi çalışan crons izin vermemek.