使用usleep()时遇到困难;

时间:2011-10-20 20:07:49

标签: php iframe

我有这个:

echo "<font color=\"#000000\">text</font>";
usleep(2000000);
header("location:/otherpage.php");
 ?>`

请注意,这将包含在iframe中......

问题是它没有回显echo语句,而是睡了两秒然后重定向(除了echo部分之外都是正确的)......

任何人都知道为什么会这样?它不是iframe,因为当你直接进入文件(与iframe分开)时,同样的情况也会发生。它可能是睡着了吗?

由于

6 个答案:

答案 0 :(得分:5)

您在上面所做的事情是行不通的。首先,您需要执行刷新以确保数据已发送。其次,更重要的是,您无法在刷新后更改标头,这会导致标头未被发送或文本未被发送。

如果您想要做的只是在延迟后更改数据,您是否考虑执行以下操作:

header('Refresh: 2; url=http://my.site.com/otherpage.php);
echo "<font color=\"#000000\">text</font>";

这将在浏览器中发送信息,指示浏览器在2秒后更改为新URL。

答案 1 :(得分:3)

这不起作用,因为输出文本后无法更改标题。 唯一的选择是在想要精确复制此行为时使用元刷新或javascript。

但是你可以通过刷新缓冲区解决输出问题,但之后没有重定向,就像我之前提到的那样。

另一个非常重要的事情是: 不要使用这些东西。 为什么?因为当你的脚本负载很重时,每个需要太多时间的请求都非常糟糕,你将耗尽php线程(取决于你的php webserver实现)。因此,对于此类超时,您应该使用客户端代码(如果可能)。

答案 2 :(得分:0)

它正在服务器上睡觉,然后发送输出。也可以在回显之后发送标题。

您应该使用javascript或元重定向,这将允许您在重定向之前等待几秒钟,并且您的php脚本可以生成这两者的时间和网址。

答案 3 :(得分:0)

你不能那样。我有一种感觉,你误解了PHP的目的,它是服务器端语言的角色。

如果要在PHP中“重定向”到另一个页面,可以使用HTTP标题执行此操作。问题是,那些是标题,所以它们必须在任何文本正文之前发送(如echo语句)。您正尝试在服务器上执行应该在客户端执行的操作。

相反,使用一些JavaScript代码创建一个HTML页面来执行重定向,如下所示:

<script>
    setTimeout(function() {
        window.location = "otherpage.html";
    }, 2000);
</script>

答案 4 :(得分:0)

将我的评论扩展为答案:

不可能像这样重定向(输出一些内容,然后尝试发送标题),因为标题必须在所有内容之前发送。 PHP也会抱怨这一点,使用默认设置你会看到警告。

其次,usleep延迟可能无法观察到,因为服务器在整个睡眠期间缓冲内容并且之后仅在一个大块中发送它。一般来说,让浏览器像这样“逐步”显示内容是不可靠的,尽管如果你把黑客堆得足够高,它可以或多或少地工作。

我可以建议,如果你需要这种行为,你应该考虑制作一系列适当的AJAX调用,这可以完美地协调。

答案 5 :(得分:0)

其他人都说了什么。只需添加usleep()将使客户端在您的服务器上保持连接打开 - 这是对有限服务器资源的非常低效的使用。您的PHP应始终尽快发送所有内容,以便您的Web服务器可以关闭连接。