ในการรัน PHP แต่ละครั้งนั้น script อาจจะจบการทำงานก่อนที่ควรจะเป็นหากผู้ใช้ยกเลิก "การเชื่อมต่อ"
แต่ไม่ใช่ว่า PHP จะตรวจสอบตลอดเวลาว่าผู้ใช้ยังเชื่อมต่ออยู่หรือไม่
ซึ่งการตรวจนี้จะทำเฉพาะเวลามีการ "ส่งข้อมูล" ไปยังผู้ใช้ ด้วยการ echo, print
หรืออื่นๆ
แต่ในบางครั้งเราไม่ต้องการให้ script ของเราตายกลางคัน อยากจะให้มันทำงานให้เสร็จสิ้น
โดยเฉพาะในกรณีที่มีการทำงานที่เกี่ยวข้องกับการอัพเดท ไฟล์/ฐานข้อมูล
หรืออะไรที่จำเป็นต้องทำให้เสร็จสิ้นไม่ว่าจะยังไงก็ตาม
เราสามารถบอก PHP ได้ว่า อย่าฆ่า script ของฉันนะ ด้วยฟังก์ชั่น
ignore_user_abort()
การทำงานดังนี้
ignore_user_abort(true);
sleep(60); // หยุดโปรแกรมไว้ 1 นาที ซึ่งในระหว่างนี้ ผู้ใช้อาจจะทนไม่ไหว ตัดการเชื่อมต่อไป
echo 'Are you there?'; // ถ้าไม่ใช้ ignore_user_abort(true)
do_something_else(); // ก็จะจบการทำงานก่อนมาถึงบรรทัดนี้
และในกรณีที่เราใช้ ignore_user_abort(true)
แล้ว
แต่ก็ยังต้องการตรวจว่า ผู้ใช้ตัดการเชื่อมต่อไปหรือยัง
เราสามารถใช้ฟังก์ชั่น
connection_aborted()
เพื่อตรวจสอบว่าผู้ใช้ยังอยู่มั้ย
ซึ่งจะมีประโยชน์ในการลดการทำงานของเซิร์ฟเวอร์
เพราะเราไม่จำเป็นต้องส่งข้อมูลไปให้ผู้ใช้แล้วหากผู้ใช้ไม่อยู่รอรับข้อมูล
ignore_user_abort(true);
sleep(60); // หยุดโปรแกรมไว้ 1 นาที ซึ่งในระหว่างนี้ ผู้ใช้อาจจะทนไม่ไหว ตัดการเชื่อมต่อไป
if (!connection_aborted()) {
echo 'Are you there?'; // ส่งข้อมูลเฉพาะเวลาที่ผู้ใช้ยังรอเราอยู่
}
do_something_else(); // แต่ก็ยังคงทำตรงนี้เหมือนเดิม