ob_flush离线工作,不在线

时间:2015-04-07 18:36:11

标签: php flush

我正在尝试在上传照片时显示图片,因此用户知道我的网站正在做某事而不是只是坐在那里。出于某种原因,我可以让它在线下正常工作,但不能在线工作。这是我的代码的相关部分:

if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
    echo '<div id="progress"><img src="images/ani_hiker.gif"/>
        <p align="center">Photos uploading...<br/>slow and steady!</p></div>';
    ob_end_flush();
    flush();
    ob_flush();
    foreach ($_FILES['files']['name'] as $i => $name) {
          //uploading files junk
    }
    echo '<script language="javascript">
        alert("Photos added successfully!");
        window.location.href="index.php?username='.$profile_link.'&select=photos";
        </script>';

如前所述,完美离线,而非在线。当我在线尝试时,照片会上传,并且在上传完成后而不是在上传过程中显示div,并显示在警告框下方。 div中的图像直到您在警告框中单击“确定”后才会出现,然后在div消失之前闪烁一秒钟,然后您将被带到另一页(如预期的那样)。

我觉得它必须与我的服务器进行某种设置,但我不知道是什么。我联系了我的主机公司,我们禁用了整个站点的输出缓冲,但这并没有解决问题。我已经恢复了输出缓冲,并且它的行为与以往一样。

1 个答案:

答案 0 :(得分:-1)

所需的行为似乎是本地机器独有的 -

来自php.net manual

  

截至2012年8月,所有浏览器似乎都显示全有或全无   缓冲方法。换句话说,当php正在运行时,没有   内容可以显示。

     

特别是这意味着进一步列出了以下变通方法   在这里是无效的:

     

1)ob_flush(),flush()与其他输出的任意组合   缓冲功能;

     

2)改变php.ini涉及设置output_buffer和/或   zlib.output_compression为0或关闭;

     

3)设置Apache变量,例如“no-gzip”   apache_setenv()或通过.htaccess中的条目。

     

所以,直到浏览器再次开始显示缓冲内容,提示   这里列出的是没有实际意义的。