ob_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消失并进入另一个页面之前闪烁一秒钟(如预期)。

我觉得这一定是我的服务器的某种设置,但我不知道是什么。我联系了我的主机公司,我们禁用了整个网站的输出缓冲,但这并没有解决问题。从那以后,我恢复了输出缓冲,它的行为和往常一样。

所需的行为似乎是并且将永远是您的本地机器独有的

来自php.net手册:

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

特别是,这意味着进一步列出了以下解决方案下面是无效的:

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

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

3) 通过apache_setenv()或通过.htaccess.中的条目

因此,在浏览器开始再次显示缓冲内容之前这里列出的是没有意义的。

最新更新