【发布时间】:2012-04-01 10:34:13
【问题描述】:
我有一个任务对象,在 __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 hack 来运行任务管理器,甚至设置一个计划任务来运行这个特定的任务,但是输出缓冲在其他地方也是一个问题。只是希望它有时消失。
从一个类似的帖子中,有人建议看看以下内容会做什么:
<?php
while (TRUE)
{
echo 'x';
flush();
sleep(1);
}
?>
正如预期的那样,页面在达到最大执行时间之前什么都不显示,此时它会刷新缓冲区。
这变得非常令人沮丧。任何人都知道什么仍然会导致它缓冲?
【问题讨论】:
-
您能否确认输出仍在缓冲,而浏览器只是不显示任何内容(例如,IE 在接收到一定数量的字节之前不会显示任何内容)?
-
我尝试了多个浏览器,所以我认为这不是问题所在。当然,经过实际测试,事实证明确实如此。 ob_get_level() 返回 0,因为这不是问题。
标签: php apache xampp buffering