我已经尝试了几次让我的flush和ob_flush正常工作。我已经尝试将ini设置为允许缓冲,我已经尝试使用我在网上找到的几个不同的函数来进行输出缓冲,但它们都不起作用。脚本想要等到它完全完成,直到它回显输出。以下是我到目前为止所使用的脚本
ob_start();
//Login User
echo 'Logging in to user<br>';
ob_flush();
flush();
$ch = curl_init("http://www.mysite.com/login/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "username=$user&pass=$pass");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies/$cookie");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies/$cookie");
$output = curl_exec($ch);
curl_close($ch);
ob_flush();
flush();
//Update Status
echo 'Updating Status<br>';
ob_flush();
flush();
$ch = curl_init("http://www.mysite.com/update/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "status=$status");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies/$cookie");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies/$cookie");
$output = curl_exec($ch);
curl_close($ch);
ob_flush();
flush();我希望它回显它正在做的事情,然后运行函数,然后回显其他内容,然后执行另一个函数。我希望所有的缓冲区都被刷新,并在浏览器上实时回显。
发布于 2010-12-19 12:28:03
这里的想法是禁用输出缓冲,而不是启用它。顾名思义,输出缓冲将把输出保存到内存中,并在脚本末尾或显式请求时显示输出。
也就是说,您不必显式地为每个输出刷新。在显示任何输出之前使用以下命令,这样您就不必在每次回显某些内容时都刷新:
ob_implicit_flush(true);
ob_end_flush();每个示例:
ob_implicit_flush(true);
ob_end_flush();
for ($i=0; $i<5; $i++) {
echo $i.'<br>';
sleep(1);
}将输出0到4,每秒显示一次。
发布于 2016-01-25 23:44:33
我只想写下我在2016年观察到的不同方法的建议:
netcoder和David提供的上述代码在以下浏览器中适用:
它在Firefox、Safari或IE 10-11中似乎不起作用。
我还测试了替代代码:
<?php
if (ob_get_level() == 0) ob_start();
for ($i = 0; $i<10; $i++){
echo "<br> Line to show.";
echo str_pad('',4096)."\n";
ob_flush();
flush();
sleep(2);
}
echo "Done.";
ob_end_flush();
?>可以在这里找到:http://php.net/manual/en/function.flush.php#54841
它目前似乎在所有浏览器中都有更好的支持:
工作的实现似乎每年都在变化,所以我想更新一下我发现自己目前正在工作的情况。
发布于 2016-09-25 05:25:37
请注意,您可能需要在may服务器(apache或nginx)上禁用gzip压缩。
这是我的问题。
https://stackoverflow.com/questions/4481235
复制相似问题