Php 使用usleep()有困难;

Php 使用usleep()有困难;,php,iframe,Php,Iframe,我有这个: echo "<font color=\"#000000\">text</font>"; usleep(2000000); header("location:/otherpage.php"); ?>` 请注意,这将包含在iframe中 问题是它不是回显echo语句,而是先休眠两秒钟,然后重定向,除了回显部分外,其他都是正确的 有人知道为什么会这样吗??它不是iframe,因为当您直接从iframe单独转到文件时,同样的情况也会发生。可能是美国列强吗 谢

我有这个:

echo "<font color=\"#000000\">text</font>";
usleep(2000000);
header("location:/otherpage.php");
 ?>`
请注意,这将包含在iframe中

问题是它不是回显echo语句,而是先休眠两秒钟,然后重定向,除了回显部分外,其他都是正确的

有人知道为什么会这样吗??它不是iframe,因为当您直接从iframe单独转到文件时,同样的情况也会发生。可能是美国列强吗


谢谢

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

但是输出问题可以通过刷新缓冲区来解决,但是正如我前面提到的,不可能重定向

另一件非常重要的事情是: 不要用USLEEP做这样的事情。
为什么?因为当您的脚本被重载时,每个需要太多时间的请求都是非常糟糕的,并且您将根据您的php Web服务器实现耗尽php线程。因此,对于此类超时,如果可能的话,您应该使用客户端代码。

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

但是输出问题可以通过刷新缓冲区来解决,但是正如我前面提到的,不可能重定向

另一件非常重要的事情是: 不要用USLEEP做这样的事情。
为什么?因为当您的脚本被重载时,每个需要太多时间的请求都是非常糟糕的,并且您将根据您的php Web服务器实现耗尽php线程。因此,对于此类超时,如果可能的话,您应该使用客户端代码。

您上面所做的将不起作用。首先,您需要进行刷新以确保数据已发送。第二,更重要的是,刷新后不能更改标题,这将导致标题未发送或文本未发送

如果你想做的只是在延迟之后改变数据,你会考虑做以下的事情:

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

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

您上面所做的操作将不起作用。首先,您需要进行刷新以确保数据已发送。第二,更重要的是,刷新后不能更改标题,这将导致标题未发送或文本未发送

如果你想做的只是在延迟之后改变数据,你会考虑做以下的事情:

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

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

它在服务器上睡眠,然后发送输出。此外,在回显某些内容后,您也无法发送标题


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

它在服务器上休眠,然后发送输出。此外,在回显某些内容后,您也无法发送标题


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

您不能这样做。我感觉您误解了PHP的用途以及它作为服务器端语言的作用

如果您想在PHP中重定向到另一个页面,可以使用HTTP头进行重定向,您确实做到了这一点。问题是,这些是标题,所以它们必须发送到任何文本体之前,就像echo语句一样。您正在尝试做一些应该在服务器客户端完成的事情

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

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

你不能这么做。我感觉您误解了PHP的用途以及它作为服务器端语言的作用

如果您想在PHP中重定向到另一个页面,可以使用HTTP头进行重定向,您确实做到了这一点。问题是,这些是标题,所以它们必须发送到任何文本体之前,就像echo语句一样。您正在尝试做一些应该在服务器客户端完成的事情

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

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

将我的评论扩展为一个答案:

不可能像这样重定向,输出一些内容,然后尝试发送一个头,因为头必须先于所有内容发送。PHP也会抱怨这一点,使用默认设置您应该会看到一条警告

其次,usleep延迟可能无法观察到,因为服务器在整个睡眠过程中缓冲内容,之后只发送一大块内容。一般来说,让浏览器以这样的步骤显示内容是不可靠的,尽管如果你把这些黑客堆得很高的话,它可以或多或少地工作 够了


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

将我的评论扩展为答案:

不可能像这样重定向,输出一些内容,然后尝试发送一个头,因为头必须先于所有内容发送。PHP也会抱怨这一点,使用默认设置您应该会看到一条警告

其次,usleep延迟可能无法观察到,因为服务器在整个睡眠过程中缓冲内容,之后只发送一大块内容。一般来说,让浏览器以这样的步骤显示内容是不可靠的,尽管如果你把这些技巧堆得足够高的话,它或多或少可以工作


我是否可以建议,如果这种行为是你所需要的,你应该考虑制定一系列的计划?适当的AJAX调用,可以完美地编排。

其他人都这么说。只需添加usleep就可以让客户端在您的服务器上保持连接打开——这是对有限服务器资源的一种非常低效的使用。您的PHP应该始终尽可能快地发送所有内容,以便您的web服务器可以关闭连接。

其他人都这么说。只需添加usleep就可以让客户端在您的服务器上保持连接打开——这是对有限服务器资源的一种非常低效的使用。您的PHP应该总是尽可能快地发送所有内容,以便您的web服务器可以关闭连接。

首先,不可能像这样重定向,必须在发送所有内容之前发送标题。第二,延迟可能无法观察到,因为服务器在整个睡眠过程中缓冲内容,然后只在一大块中发送。首先,不可能像这样重定向头必须在所有内容之前发送。其次,延迟可能无法观察到,因为服务器在整个睡眠过程中对内容进行缓冲,之后只发送一大块内容。