ปัญหา
ฉันมีแบบฟอร์มที่เมื่อส่งแล้วจะเรียกใช้โค้ดพื้นฐานเพื่อประมวลผลข้อมูลที่ส่งและแทรกลงในฐานข้อมูลเพื่อแสดงบนเว็บไซต์แจ้งเตือน นอกจากนี้ฉันมีรายชื่อผู้ที่สมัครรับการแจ้งเตือนเหล่านี้ทางอีเมลและข้อความ SMS รายการนี้เป็นเรื่องเล็กน้อยในขณะนี้ (เพียงแค่ผลักดันประมาณ 150) แต่ก็เพียงพอที่จะทำให้ต้องใช้เวลามากกว่าหนึ่งนาทีในการวนรอบตารางสมาชิกทั้งหมดและส่งอีเมลมากกว่า 150 ฉบับ (อีเมลจะถูกส่งทีละรายการตามที่ผู้ดูแลระบบของเซิร์ฟเวอร์อีเมลของเราร้องขอเนื่องจากนโยบายอีเมลจำนวนมาก)
ในช่วงเวลานี้บุคคลที่โพสต์การแจ้งเตือนจะนั่งอยู่ที่หน้าสุดท้ายของแบบฟอร์มเป็นเวลาเกือบหนึ่งนาทีโดยไม่มีการสนับสนุนเชิงบวกว่ามีการโพสต์การแจ้งเตือน สิ่งนี้นำไปสู่ปัญหาที่อาจเกิดขึ้นอื่น ๆ ทั้งหมดที่มีทางแก้ไขที่เป็นไปได้ซึ่งฉันรู้สึกว่าน้อยกว่าอุดมคติ
ขั้นแรกผู้โพสต์อาจคิดว่าเซิร์ฟเวอร์ทำงานช้าและคลิกปุ่ม "ส่ง" อีกครั้งทำให้สคริปต์เริ่มต้นใหม่หรือทำงานสองครั้ง ฉันสามารถแก้ปัญหานี้ได้โดยใช้ JavaScript เพื่อปิดใช้งานปุ่มและแทนที่ข้อความเพื่อพูดบางอย่างเช่น 'กำลังประมวลผล ... ' อย่างไรก็ตามสิ่งนี้น้อยกว่าที่เหมาะสมเนื่องจากผู้ใช้จะยังคงติดอยู่บนหน้าสำหรับความยาวของการเรียกใช้สคริปต์ (นอกจากนี้หากปิดใช้งาน JavaScript ปัญหานี้ยังคงมีอยู่)
ประการที่สองผู้โพสต์อาจปิดแท็บหรือเบราว์เซอร์ก่อนเวลาอันควรหลังจากส่งแบบฟอร์ม สคริปต์จะทำงานบนเซิร์ฟเวอร์ต่อไปจนกว่าจะพยายามเขียนกลับไปยังเบราว์เซอร์อย่างไรก็ตามหากผู้ใช้เรียกดูหน้าใด ๆ ภายในโดเมนของเรา (ในขณะที่สคริปต์ยังทำงานอยู่) เบราว์เซอร์จะหยุดการโหลดหน้าจนกว่าสคริปต์จะสิ้นสุดลง . (สิ่งนี้จะเกิดขึ้นก็ต่อเมื่อปิดแท็บหรือหน้าต่างของเบราว์เซอร์ไม่ใช่ทั้งแอปพลิเคชันเบราว์เซอร์) ถึงกระนั้นก็ยังน้อยกว่าที่เหมาะสม
(เป็นไปได้) วิธีแก้ไข
ฉันตัดสินใจว่าต้องการแยกส่วน "อีเมล" ของสคริปต์ออกเป็นไฟล์แยกต่างหากที่ฉันสามารถโทรได้หลังจากโพสต์การแจ้งเตือนแล้ว ตอนแรกฉันคิดว่าจะวางสิ่งนี้ไว้ในหน้ายืนยันหลังจากโพสต์การแจ้งเตือนสำเร็จแล้ว อย่างไรก็ตามผู้ใช้จะไม่ทราบว่าสคริปต์นี้กำลังทำงานอยู่และจะไม่ปรากฏความผิดปกติใด ๆ สคริปต์นี้ไม่สามารถล้มเหลว
แต่ถ้าฉันสามารถเรียกใช้สคริปต์นี้เป็นกระบวนการพื้นหลังได้ล่ะ? คำถามของฉันคือ: ฉันจะเรียกใช้สคริปต์ PHP เพื่อทริกเกอร์เป็นบริการพื้นหลังและเรียกใช้โดยไม่ขึ้นกับสิ่งที่ผู้ใช้ทำในระดับฟอร์มได้อย่างไร
แก้ไข:นี้ไม่สามารถจะ cron'ed ต้องเรียกใช้ทันทีที่ส่งแบบฟอร์ม นี่คือการแจ้งเตือนที่มีลำดับความสำคัญสูง นอกจากนี้ผู้ดูแลระบบที่เรียกใช้เซิร์ฟเวอร์ของเราไม่อนุญาตให้ crons ทำงานบ่อยเกิน 5 นาที