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

看板PHP作者 (KK)時間9年前 (2016/07/27 16:28), 9年前編輯推噓3(303)
留言6則, 4人參與, 最新討論串1/1
新手初次發文, 目前在寫網頁 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上面 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.220.130 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1469608130.A.733.html ※ 編輯: jsStream (114.32.220.130), 07/27/2016 16:35:48

07/27 16:59, , 1F
stdout 寫到檔案或db, ajax定期抓檔案或db
07/27 16:59, 1F

07/27 16:59, , 2F
不然就要改websocket的方法,往前台塞
07/27 16:59, 2F

07/27 17:01, , 3F
通常是用排程去作處理,執行緒才不會被佔走
07/27 17:01, 3F

07/27 18:40, , 4F
一般來說sleep不就是會放掉執行緒嗎?我使用apeach就ok耶
07/27 18:40, 4F

07/31 23:51, , 5F
用 ob_end_clean 取代 ob_start, fastcgi_keep_conn 設 on
07/31 23:51, 5F

08/03 01:16, , 6F
Browser 也有 buffer, 請從這個方向去研究
08/03 01:16, 6F
文章代碼(AID): #1Nc732Sp (PHP)
文章代碼(AID): #1Nc732Sp (PHP)