【发布时间】:2014-06-25 00:06:31
【问题描述】:
好吧,我不知道为什么 flush() 不起作用。我到处搜索这个问题,但没有成功。目前我没有 nginx 或 fastCGI(已被提及为有特殊需求)。我有一个 php.ini 覆盖文件来更改这些值:
output_buffering = Off
implicit_flush = 1
zlib.output_compression = 0
我已经在实际的 php 中尝试了所有的东西,但这是我目前拥有的:
ignore_user_abort(true);
set_time_limit(0);
header('Content-Encoding: none;');
header('X-Accel-Buffering: no');
header("Connection: close");
echo 'success?';
ob_flush();
flush();
/******** background process starts here ********/
sleep(2);
echo 'dammit';
这只是测试信息。最终目标是使用 jquery 通过 ajax POST 提交数据并发送成功并继续处理信息。在脚本的其余部分运行时,用户不应该等待。如果我直接调用文件,我什至无法让它工作!不管我怎么操作,两个回声同时吐出!
【问题讨论】:
-
在后台运行它,轮询数据库以获取结果,我不认为使用刷新是正确的方法
-
一直以来我的理解是
flush()依赖于用户代理,大多数用户代理会在更新之前等待最少量的内容。这就是为什么许多依赖刷新的系统使用echo str_pad('', 4096);之类的东西来达到最低阈值......但是我不知道这是否会像你期望的那样在 AJAX 上工作(不太可能),作为方式这些请求的处理方式与代理呈现页面的方式不同。 stackoverflow.com/questions/14574432/… -
ob_get_level()说什么? -
ob_flush()发送输出缓冲区的当前内容。看起来您没有使用输出缓冲,所以缓冲区将为空,ob_flush()不会做任何事情。您的输出已发送给客户端。 -
ob_get_level()显示 1. Dagon 我宁愿这一切都发生在一个电话中。这实际上是有效的,然后我的主机决定将 PHP 从 5.2 升级到 5.3。即使output_buffering开启和implicit_flush关闭,ob_flush()也无法正常工作。我真的倾向于这是一些不寻常的东西,比如 php 设置或奇怪的服务器设置。