XAMPP 便携式设备上的输出缓冲区问题


Output buffer issue on XAMPP portable

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

有趣的是,我运行了相同的脚本将 xampp 便携式复制到另一个系统,并且 flush 语句可以正常工作。相同的代码,相同的 xampp 可移植。

可能是什么原因?

将脚本的第一行设为ob_implicit_flush();

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

从文档中:

implicit_flush布尔值,默认情况下为 FALSE。将其更改为 TRUE 告诉 PHP 告诉输出层在每次后自动刷新自己 输出块。这相当于调用 PHP 函数 flush() 在每次调用打印或回显以及每个 HTML 之后 块。

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

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

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

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

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

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

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

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

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

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

  • 浏览器

    • 尝试一些浏览器(清除缓存)以查看问题是否特定于浏览器。
我认为

这可能是您的浏览器。您是否清理了铁便携式浏览器的临时设置?

当您使用gzip并且已经发送了一些输出时,就会发生这种情况,因此浏览器对此感到困惑以解决此问题,我始终使用此代码

if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false)
    {ob_start('ob_gzhandler'); ob_start();}
else
    ob_start();

您没有提到Windows和正在运行的系统的版本。系统是否完全相同?

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

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

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

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

我想您的情况与此类似,并且必须对系统生命体征做很多事情。

干杯克莱恩

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