我有一个任务对象和__deconstruct(),它意味着在页面的其余部分已经加载后运行一些较长的清理任务。不幸的是,它会缓冲输出,直到任务完成后才会发送它(任务中没有打印任何内容)。
我已阅读http://www.php.net/flush并尝试了所有建议。显然我已经尝试在php.ini中禁用output_buffering。我已禁用deflate_module,zlib压缩已关闭,没有mod_gzip。调用flush()或ob_flush()没有效果,也没有启用implicit_flush。
我刚刚在Windows Server 2008 R2下运行XAMPP(目前是apache 2.2.17,php 5.3.4)。 PHP正在作为模块运行。
是的,我可以设置一些小的AJAX黑客来运行任务管理器,甚至设置一个计划任务来运行这个特定的任务,但输出缓冲也是其他地方的问题。只是希望它有时消失。
在类似的帖子中,有人建议看看以下内容:
<?php
while (TRUE)
{
echo 'x';
flush();
sleep(1);
}
?>
正如预期的那样,页面在达到最大执行时间之前不会显示任何内容,此时它会刷新缓冲区。
这已经变得非常令人沮丧。任何人都有什么想法可能导致它缓冲?
答案 0 :(得分:4)
您只发送少量数据。浏览器有自己的缓冲区,可以基于多个字节,已经接收到元素,或者其他东西。
简而言之,你无能为力。缓冲发生在客户端,而不是服务器端。您可以尝试在x
之前发送更多数据。
您可以通过数据包嗅探服务器与浏览器之间的连接,Wireshark或类似内容来证明这一点。
答案 1 :(得分:4)
https://stackoverflow.com/a/9728519/632951
<?php
echo str_repeat('fillerbytes',20*1024/strlen('fillerbytes'));
echo '<body style="font-size:6px;font-family:arial;">';
echo str_repeat('<br>',2);
for($i=1; $i<=5000; $i++){
echo $i . ' ';
ob_flush();
flush();
usleep(2000); // 2 ms each = 10s total
}
?>
观察我的服务器数量为5000 http://atwebresults.com/texttest/new.php
(对freehostingeu.com等免费主机不起作用。)