php flush无效,IIS7下php实时输出的方法

网络编程 2025-03-24 00:17www.168986.cn编程入门

IIS7下PHP实时输出的奥秘:让flush()不再无效

在进行长时间操作的PHP任务时,我们往往希望将过程中的信息实时地展示在浏览器上,以让用户了解任务的进度。为此,我们通常会使用flush()函数来清空输出缓冲区,将内容发送到浏览器。但在IIS7中使用fastcgi模式配置PHP时,我们可能会发现flush()并不如预期那样工作,所有的输出似乎都在等待直到脚本结束才一起显示。

让我们来看一个示例代码段:

```php

for ($i=10; $i>0; $i--) {

echo $i.'
';

@ob_flush();

flush();

sleep(1);

}

```

此代码意在逐行显示数字,每秒钟更新一次,但在IIS的默认设置下,却会等到所有数字都生成完毕才一起显示。

为了解决这个问题,我们需要对IIS的配置进行一些调整。以下是解决方案:

打开文件 `C:\Windows\System32\isrv\config\applicationHost.config`。如果你的系统是64位的,确保使用64位的编辑软件打开该文件,否则可能会提示文件不存在。可以使用系统自带的记事本(Notepad)打开。找到PHP handler的部分,在其中的代码加入 `responseBufferLimit="0"`。

代码示例:

```xml

```

还需要确保phpi文件中的output_buffering设置为Off。

值得注意的是,不同浏览器可能会有不同的表现。在Internet Explorer中,上述设置通常可以正常工作,但在Chrome中,每个echo输出的内容必须包含HTML。如果输出的内容太短,可能无法实现实时显示的效果。为此,你可以在代码开始前输出一段空格或其他字符,例如使用`echo str_pad(' ', 1050);`来确保输出足够多的字符。

通过上述调整,你应该可以在IIS7的PHP fastcgi模式下成功实现实时输出,让用户在等待过程中获得更及时的信息反馈。

上一篇:Flex DataGrid 伪合并单元格实现思路 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by