首先,我也没能使用ubuntu 12.04 LAMP的基本安装(php5.3)。但我有一些信息,希望它能有所帮助。欢迎任何评论或编辑!:)
我看到你的代码有两个问题。第一个是语法错误。你漏掉了周围的单引号
myShutdown
打电话时
register_shutdown_function()
。将行更改为:
register_shutdown_function('myShutdown');
我看到的第二个问题是缺失
flush()
在之后呼叫
echo
s.文件上写着:
在尝试向客户端发送信息之前,PHP不会检测到用户已中止连接。简单地使用echo语句并不能保证信息被发送,请参阅flush()。
但即便如此
冲洗()
无论如何都无济于事。来自
冲洗()
:
flush()可能无法覆盖web服务器的缓冲方案,并且它对浏览器中的任何客户端缓冲都没有影响。它也不会影响PHP的用户空间输出缓冲机制。这意味着您必须同时调用ob_flush()和flush()来刷新ob输出缓冲区(如果您正在使用它们的话)。
一些服务器,尤其是Win32上的服务器,仍然会缓冲脚本的输出,直到脚本终止,然后将结果传输到浏览器。
像mod_gzip这样的Apache服务器模块可能会自己进行缓冲,这会导致flush()无法将数据立即发送到客户端。
即使是浏览器也可能在显示输入之前对其进行缓冲。例如,Netscape会缓冲文本,直到它接收到行的末尾或标记的开头,并且在看到最外面的表的标记之前不会渲染表。
某些版本的Microsoft Internet Explorer只有在收到256字节的输出后才会开始显示页面,因此您可能需要在刷新前发送额外的空白,以使这些浏览器显示页面。
在该页面的注释中,有一条建议,可以设置几个标头和apache配置:
apache_setenv('no-gzip', 1);
ini_set('zlib.output_compression', 0);
ini_set('implicit_flush', 1);
然而,即使这样也不适用于我。我使用wiresharek对此进行了调查,尽管网络服务器在0.0037秒后发送内容(“嗨”),但网络浏览器正在缓冲页面。