【问题标题】:ob_flush () does not work on my serverob_flush () 在我的服务器上不起作用
【发布时间】:2018-07-13 15:22:05
【问题描述】:

此功能在我的另一台服务器上完美运行,在我的电脑上本地显示每秒的数字,但是当我从客户端发送云代码时,它仅在页面加载 100% 后显示结果。

它在这里正常工作: http://kicklaunch.me/buffer.php

仅当页面完全加载时: http://raio.adm.br/buffer.php

两台服务器的 PHP 版本相同 5.4.45

<?php
for($i=0; $i<20; $i++) { 
    echo 'printing...'."<p>";
    ob_flush(); 
    flush(); 
    sleep(1); 
}
?> 

解决方案

output_buffering = 关闭

ob_implicit_flush(1);

for($i=0; $i<10; $i++){
    echo $i;
    //this is for the buffer achieve the minimum size in order to flush data
    echo str_repeat(' ',1024*64);
    sleep(1);
}

【问题讨论】:

  • 这个问题没有解决我的问题。
  • 在生产中可能有一个代理服务器,PHP 由另一个进程通过 (F)CGI 执行。代理可以配置为在将完整响应传递给客户端之前对其进行缓冲。
  • 你永远不需要使用这样的“真实”代码,所以继续前进,它不起作用并研究使用队列、ajax、websockets、sse 等
  • 您使用的是共享主机吗?还是你自己的服务器?您的服务器中的 output_buffering 似乎已关闭。您需要编辑 php.ini 文件并取消注释 output_buffering = Off' option and set it to output_buffering = Onor output_buffering = 4096`

标签: php apache io output-buffering


【解决方案1】:

正如您所提到的,您在评论中没有看到 output_buffering 的任何值,我认为它已在您的服务器中关闭。

如果您使用自己的服务器,请在您的phpinfo 页面中查找Configuration File (php.ini) Path 选项(我要求您在 cmets 中创建该选项)。

然后打开该文件,找到;output_buffering = Off 行,并将其更改为:

output_buffering = 4096

您可能需要重新启动您的 apache 服务器(或您的网络服务器,如果它不同的话)。

================================================ ===============

如果您使用共享主机,大多数主机提供商允许您通过将php.ini 文件添加到您的public_html 文件夹来添加自己的配置。

创建一个名为php.ini 的文件并在其中包含output_buffering = 4096,然后将其上传到您的public_html 文件夹。它应该工作。

希望对您有所帮助 :) 如果您有任何疑问,请随时提出任何问题。

【讨论】:

    猜你喜欢
    • 2015-12-08
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 2016-06-03
    相关资源
    最近更新 更多