我正在尝试在上传照片时显示图片,因此用户知道我的网站正在做某事而不是只是坐在那里。出于某种原因,我可以让它在线下正常工作,但不能在线工作。这是我的代码的相关部分:
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消失之前闪烁一秒钟,然后您将被带到另一页(如预期的那样)。
我觉得它必须与我的服务器进行某种设置,但我不知道是什么。我联系了我的主机公司,我们禁用了整个站点的输出缓冲,但这并没有解决问题。我已经恢复了输出缓冲,并且它的行为与以往一样。
答案 0 :(得分:-1)
所需的行为似乎是本地机器独有的 -
截至2012年8月,所有浏览器似乎都显示全有或全无 缓冲方法。换句话说,当php正在运行时,没有 内容可以显示。
特别是这意味着进一步列出了以下变通方法 在这里是无效的:
1)ob_flush(),flush()与其他输出的任意组合 缓冲功能;
2)改变php.ini涉及设置output_buffer和/或 zlib.output_compression为0或关闭;
3)设置Apache变量,例如“no-gzip” apache_setenv()或通过.htaccess中的条目。
所以,直到浏览器再次开始显示缓冲内容,提示 这里列出的是没有实际意义的。