【发布时间】:2012-02-29 05:24:47
【问题描述】:
有人可以保存这 2 个文件并运行它们并告诉我为什么会收到错误“ob_flush() [ref.outcontrol]: failed to flush buffer. No buffer to flush”。我试着用谷歌搜索,它说我必须使用 ob_start();但是当我这样做时,它不会逐行打印出来,而是在完成后从 FOR 循环中返回整个对象。我对 PHP 有点陌生,所以我不知道还能去哪里找。。
test_process.php
// This script will write numbers from 1 to 100 into file
// And sends continuously info to user
$fp = fopen( '/tmp/output.txt', 'w') or die('Failed to open');
set_time_limit( 120);
ignore_user_abort(true);
for( $i = 0; $i < 100; $i++){
echo "<script type=\"text/javascript\">parent.document.getElementById( 'foo').innerHTML += 'Line $i<br />';</script>";
echo str_repeat( ' ', 2048);
flush();
ob_flush();
sleep(1);
fwrite( $fp, "$i\n");
}
fclose( $fp);
main.html
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript" charset="utf-8"></script>
<style type="text/css" media="screen">
.msg{ background:#aaa;padding:.2em; border-bottom:1px #000 solid}
.new{ background-color:#3B9957;}
.error{ background-color:#992E36;}
</style>
</head>
<body>
<iframe id="loadarea" width="1024px" height="768px"></iframe><br />
<script>
function helper() {
document.getElementById('loadarea').src = 'test_process.php';
}
function kill() {
document.getElementById('loadarea').src = '';
}
</script>
<input type="button" onclick="helper()" value="Start">
<input type="button" onclick="kill()" value="Stop">
<div id="foo"></div>
</body>
</html>
【问题讨论】:
-
检查你在php.ini中关于输出缓冲区的配置,它可以自动启用on_start。检查它是否启用的另一种方法是在开始时使用 ob_end_flush() 并删除所有刷新。您也可以通过
phpinfo();进行检查 -
您好,感谢您的回复。我尝试启用输出缓冲,但随后它返回整个 for 循环对象而不是逐行...
标签: php ajax while-loop flush