Site icon PlusMagi's Blog By Pitt Phunsanit

NGINX: แสดงผลลัพธ์ทันที

บางครั้งที่ทำงานที่ใช้เวลานาน เช่น การเปลี่ยนค่าข้อมูลในตารางทั้งตาราง แต่ php จะแสดงผลลัพธ์ออกมาหลังจากที่มันทำงานเสร็จแล้ว user ก็คิดว่ามัน error ก็เลยปิดไปซะ T_T วิธีที่ใช้ได้คือ การปล่อย flush output ออกมาเป็นระยะโดยเล่นกับพวก function ob_flush เหมือนในที่เคยเขียนไว้ jQuery: Ajax รับข้อมูลแบบ stream แต่กลับไม่ทำงานบน nginx ซะงั้น

วิธีแก้คือใส่

header ('X-Accel-Buffering: no') ;

เพื่อให้ nginx มันส่งข้อมูลที่อมเอาไว้ออกมาซะดี ๆ นี่เป็นตัวอย่าง code ใหม่

<?php
header ('X-Accel-Buffering: no') ;

set_time_limit (0) ;

ob_implicit_flush (true) ;
ob_end_flush () ;

$steps = 100;
for ($step = 1; $step <= $steps; $step++) {
 $time = rand (1, 10) ;
 sleep ($time) ;
 echo '<br>ขั้นตอนที่ ', $step, ' จาก ', $steps, ' ใช้เวลาทำงาน ', $time, ' วินาที';
}

อ่านเพิ่มเติม

Exit mobile version