Php XAMPP portable上的输出缓冲区问题

Php XAMPP portable上的输出缓冲区问题,php,xampp,output-buffering,Php,Xampp,Output Buffering,我在windows上运行xampp portable中的php脚本。剧本要花一分钟的时间。最近,脚本出现了flush()问题,因为不会立即显示echo语句。以前使用的脚本工作正常,没有缓冲问题 有趣的是,我运行了相同的脚本,将xampp portable复制到另一个系统,而flush语句工作正常。同样的代码,同样的xampp可移植 原因可能是什么?我想可能是你的浏览器。您是否已清理Iron Portable browser的临时设置?将脚本的第一行ob_implicit_flush() 或 更改

我在windows上运行xampp portable中的php脚本。剧本要花一分钟的时间。最近,脚本出现了flush()问题,因为不会立即显示echo语句。以前使用的脚本工作正常,没有缓冲问题

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


原因可能是什么?

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

将脚本的第一行
ob_implicit_flush()

更改php.ini文件设置
implicit\u flush=On

来自文档:

隐式布尔值,默认为FALSE。将此更改为TRUE表示 PHP命令输出层在每次 输出块。这相当于调用PHP函数flush() 在每次调用print或echo以及每次调用HTML之后 街区

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


当您使用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秒来处理

这个缓慢的系统产生了不想要的结果[我当时正在使用图像处理器]

我猜你的情况也很相似,而且对系统的生命体征有很大影响

干杯
Clain

我读了其他回复,而你一直坚持你的家庭环境和工作环境是一样的。然而,你可以看到有一个区别。这种观点确实有助于(至少对我来说)调查问题

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

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

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

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

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

      (评论员指出了你可能遇到的许多问题)

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

  • 浏览器

    • 尝试几个浏览器(清除缓存),看看问题是否与浏览器相关

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

脚本在这两个实例中是否产生了相同/相似的输出?我这样问是因为有些浏览器会在开始渲染任何内容之前缓冲第一个X字节。此外,启用输出压缩(gzip、deflate等)在极少数情况下可能会导致这种行为。缓冲问题最近开始出现。我正在使用Iron便携式浏览器。所以,相同的代码,相同的XAMPP可移植性,相同的Iron可移植性。刷新在我的家庭系统中工作正常,而不是在工作中。你能提供xamppyes给出的错误代码吗?我清理了临时文件。此外,它和我从家用电脑同步的iron便携式浏览器是一样的。这是代码的前几行:ini_set('memory_limit','-1');设置时间限制(1800);@apache_setenv('no-gzip',1)@ini_集('zlib.output_compression',0)@ini_集(“隐式_刷新”,1);ob_implicit_flush();两台机器上的XAMPP Apache/php.ini都允许php覆盖吗?即使您在代码中设置了这一点,听起来服务器可能不允许在同一台机器上使用它—它是同一个XAMPP便携机、同一个代码文件夹、同一个Iron便携浏览器。我刚把文件夹复制到一个新系统。缓冲在我的家庭系统上很好,但在我的工作电脑上却不行。