1

我从 Windows 上的 xampp 便携式运行 php 脚本。脚本需要一分钟。最近,脚本出现了 flush() 问题,因为 echo 语句没有立即显示。该脚本以前可以正常工作,没有缓冲问题。

有趣的是,我运行相同的脚本将 xampp 可移植到另一个系统,并且刷新语句正常工作。相同的代码,相同的 xampp 可移植。

可能是什么原因?

4

6 回答 6

1

制作脚本的第一行ob_implicit_flush();

或者

更改php.ini文件设置implicit_flush = On

从文档中:

implicit_flush 布尔值,默认为 FALSE。将此更改为 TRUE 告诉 PHP 告诉输出层在每个输出块之后自动刷新自身。这相当于在每次调用 print 或 echo 以及每个 HTML 块之后调用 PHP 函数 flush()。

在 Web 环境中使用 PHP 时,打开此选项会严重影响性能,通常建议仅用于调试目的。

于 2013-11-06T23:41:17.213 回答
1

我阅读了其他回复,您一直坚持认为您的家庭环境和工作环境是相同的。但是,您可以看到存在差异。这种观点确实有助于(至少对我而言)调查问题。

由于您没有提供有关该问题的许多详细信息,因此我将尝试以下清单:

  • 设置
    • 您的 PHP 设置真的相同吗?尝试比较phpinfo()两种环境的结果。
  • 数据

    • 你真的在相同的数据上测试你的脚本吗?PHP手册中描述了许多微妙的问题:

      甚至浏览器也可以在显示之前缓冲它的输入。例如,Netscape 会缓冲文本,直到它接收到行尾或标记的开头,并且在看到最外层表格的标记之前不会呈现表格。

      某些版本的 Microsoft Internet Explorer 仅在收到 256 字节的输出后才开始显示页面,因此您可能需要在刷新之前发送额外的空格以使这些浏览器显示页面。

      http://php.net/manual/en/function.flush.php

      或者

      http://www.php.net/manual/en/function.ob-flush.php#90529(评论者指出您可能遇到的许多问题)

    • 尝试使用虚拟纯文本数据而不是 HTML。您可以尝试输出简单的行,例如当前时间并检查脚本的行为。

  • 浏览器

    • 尝试一些浏览器(清除缓存)以查看问题是否是特定于浏览器的。
于 2013-11-10T20:28:12.480 回答
0

我想可能是你的浏览器。您是否清理过 Iron Portable 浏览器的临时设置?

于 2013-11-05T16:40:20.543 回答
0

我发现问题出在防病毒软件上。我最近从 Avast 切换到 Bitdefender。当我切换回 Avast 时,问题奇迹般地消失了。所以,我想防病毒软件也是这里的一个因素。

于 2013-11-14T12:47:01.383 回答
0

当您使用 gzip 并且已发送一些输出时会发生这种情况,因此浏览器无法解决此问题,我总是使用此代码

if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false)
    {ob_start('ob_gzhandler'); ob_start();}
else
    ob_start();
于 2013-11-08T23:19:33.140 回答
0

您还没有提到两个系统运行的 Windows 版本。系统是否完全相同?

您还说您正在运行 XAMPP 的便携式版本,如果您使用的是笔式驱动器/重击驱动器,则数据传输速度可能会因 USB 速度而有所不同。

我有一个类似的问题,第一个系统有 USB 传统端口,而我测试的第二个系统有 usb 2+ 端口或更高。

速度和处理时间因系统而异,一个系统需要 20 秒,另一个需要近 60 秒来处理。

缓慢的系统产生了不希望的结果[我正在研究图像处理器]。

我猜你的情况很相似,并且必须对系统生命体征做很多事情。

干杯克莱恩

于 2013-11-10T05:17:51.163 回答