0

我制作了一个上传脚本,用户在上传用户被重定向到下一页后上传文件,我将该文件转储到数据库并显示 gif 图像,loading data..然后sleep(10)创建延迟并将该图像替换为showing data. 我面临的问题是,在上传代码后,sleep(10)无论在该文件中传递了多少延迟,都将代码作为执行时间并在下一页显示最终输出,所有这些延迟加起来就是执行时间并显示用户最终输出转储完成后。请让我知道为什么会这样。

注意我使用了flush()它也没有工作并且它在我的配置文件中启用

<?php 
flush();
ob_flush();
echo '<script language="javascript">document.getElementById("information").innerHTML="<img src='."images/L.gif".' />"</script>';
sleep(30);
echo '<script language="javascript">document.getElementById("information").innerHTML="<img src='."images/C.gif".' />"</script>';
 ?>
4

2 回答 2

2

您正在刷新输出,他们将一个字符串添加到缓冲区然后睡眠,然后再次将另一个字符串添加到缓冲区然后再次刷新。在睡眠前的第一次回声之后
使用;ob_flush()

ob_start();
echo '<script language="javascript">document.getElementById("information").innerHTML="<img src='."images/L.gif".' />"</script>';
ob_flush();
sleep(30);
echo '<script language="javascript">document.getElementById("information").innerHTML="<img src='."images/C.gif".' />"</script>';

你也可以关掉output_buffering

并使用具有固定延迟检查的 AJAX,而不是使用无休止的页面加载。

于 2012-12-09T17:23:28.363 回答
1

对此有解决方案(即flush在您的echo陈述之后和您的陈述之前sleep)。但是,无论如何,这不太可能做你想要的跨浏览器。AJAX 将是此类任务的更好解决方案(很可能)。

根据浏览器和配置的不同,在关闭与服务器的连接之前,浏览器可能不会开始渲染任何内容。在这种情况下,在您的所有延迟都过去之前,用户不会在他们的屏幕上看到任何内容。

于 2012-12-09T17:27:44.960 回答