[請益] php ob_flush() 沒有作用

作者: jsStream (KK)   2016-07-27 16:28:47
新手初次發文, 目前在寫網頁 parser
因為執行時間很久, 因此希望在執行過程中,能夠partial去output畫面
不要等全部parse完後, 才一次秀出結果
因此有查到可以使用ob_flush()的方式, 強制從server 丟結果到front end
但是測試發現, 如果再console去執行 (ex. php parser.php) 的時候,
console會分批次慢慢地吐出結果來
<?php
ob_start();
for($i=0;$i<20;$i++)
{
echo 'printing...<br />';
ob_flush();
flush();
usleep(300000);
}
?>
可是如果用browser的話, 網頁就還是會等到結果全部parse完後, 才出來
不知道是否有大大碰過這樣狀況, 該如何設定server呢?
我使用的環境是 Nginx + FPM-php的, run在raspberry pi上面
作者: shadowjohn (轉角遇到愛)   2016-07-27 16:59:00
stdout 寫到檔案或db, ajax定期抓檔案或db不然就要改websocket的方法,往前台塞通常是用排程去作處理,執行緒才不會被佔走
作者: jsStream (KK)   2016-07-27 18:40:00
一般來說sleep不就是會放掉執行緒嗎?我使用apeach就ok耶
作者: alans (只要有心人人都是食神)   2016-07-31 23:51:00
用 ob_end_clean 取代 ob_start, fastcgi_keep_conn 設 on
作者: kensou0012 (HikaruOcean)   2016-08-03 01:16:00
Browser 也有 buffer, 請從這個方向去研究

Links booklink

Contact Us: admin [ a t ] ucptt.com