我有一个PHP脚本,只生成日志到客户端.
当我回应某些内容时,我希望它能够即时转移到客户端.
(因为在脚本处理过程中,页面是空白的)
,我已经打得四处ob_start()和ob_flush(),但他们没有工作.
什么是最好的解决方案?
PS:在echo通话结束时放一个同花牌有点脏......
编辑:Answers既不工作,PHP或Apache错误?
<?php
for($i=0;$i<20;$i++)
{
echo 'printing...<br />';
ob_flush();
flush();
usleep(300000);
}
?>
Run Code Online (Sandbox Code Playgroud)
包含以下代码的网址:http://domainsoutlook.com/sandbox/delayed.php
我有一个专用服务器,所以我可以进行更改.我正在运行apache和nginx作为代理服务器.
我有一个使用cURL的PHP脚本,大约需要10-15分钟才能执行.它做了什么,它解析大约1000页寻找特定的匹配,并在整个脚本中我有回声消息,如"转到下一页","找到匹配","加载页面错误"...现在它的工作方式(以及它的正常方式)是执行10分钟,然后才会吐出所有自定义消息.我希望能够在这些消息发生时显示这些消息,而不是在脚本执行完毕时.我在想像AJAX这样的东西,但我不确定它是如何工作的.任何提示都非常感谢.谢谢.
我们一直在使用php flush一旦点击它就立即"空白"页面,并且还发送页面的导航和主要组件,以便页面几乎立即出现,即使有时内容可能需要很长时间载入.
这一直很好.
最近我们从IIS 7.0升级到7.5,现在flush不起作用.在调查问题时,我们已关闭静态和动态文件的压缩.我们还关闭了输出缓存.
我们还关闭了zlib压缩并在php.ini中输出缓冲.
为了测试问题,我们有以下脚本
@ini_set("output_buffering", "Off");
@ini_set('implicit_flush', 1);
@ini_set('zlib.output_compression', 0);
ob_start();
echo "starting...<br/>\n";
for($i = 0; $i < 5; $i++) {
print "$i<br/>\n";
ob_end_flush();
ob_flush();
flush();
ob_start();
sleep(2);
}
print "DONE!<br/>\n";
Run Code Online (Sandbox Code Playgroud)
浏览器只显示加载状态(无论在任何浏览器中,在IE中它看起来像一个Ajax动画gif,在Firefox中,标签会显示"正在连接...")10秒钟,然后突然显示整个输出.
我们根据本网站上的类似问题尝试了flush和ob_flush以及ob_end_flush的各种组合.他们都没有工作.有没有办法让IIS/PHP刷新数据?