作者jsStream (KK)
看板PHP
标题[请益] php ob_flush() 没有作用
时间Wed Jul 27 16:28:47 2016
新手初次发文, 目前在写网页 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://webptt.com/cn.aspx?n=bbs/PHP/M.1469608130.A.733.html
※ 编辑: jsStream (114.32.220.130), 07/27/2016 16:35:48
1F:推 shadowjohn: stdout 写到档案或db, ajax定期抓档案或db 07/27 16:59
2F:→ shadowjohn: 不然就要改websocket的方法,往前台塞 07/27 16:59
3F:推 shadowjohn: 通常是用排程去作处理,执行绪才不会被占走 07/27 17:01
4F:→ jsStream: 一般来说sleep不就是会放掉执行绪吗?我使用apeach就ok耶 07/27 18:40
5F:推 alans: 用 ob_end_clean 取代 ob_start, fastcgi_keep_conn 设 on 07/31 23:51
6F:→ kensou0012: Browser 也有 buffer, 请从这个方向去研究 08/03 01:16