脚本工作正常,但不执行延迟

时间:2012-12-09 17:19:57

标签: php

我制作了一个上传脚本,用户在上传用户重定向到下一页后上传文件,我将该文件转储到数据库并显示loading data..的gif图像,然后将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>';
 ?>

2 个答案:

答案 0 :(得分: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,而不是使用无休止的页面加载。

答案 1 :(得分:1)

有解决方案(即flush语句之后echo语句之前的sleep。但是,无论如何,这不太可能做你想要的跨浏览器。对于这类任务(最有可能),AJAX将是一个更好的解决方案。

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