【问题标题】:PHP - Delay on redirectPHP - 重定向延迟
【发布时间】:2013-02-04 00:26:30
【问题描述】:

我正在使用下面的代码作为空引用脚本的一种形式,它运行良好,但它只是将它们直接重定向到目标 URL。

我将如何创建一个 5 秒的延迟,以便在重定向之前显示一些广告 5 秒?

【问题讨论】:

  • 也可以使用HTML:<meta http-equiv="refresh" content="5; URL=http://stackoverflow.com">
  • 为什么不使用 sleep() 函数?
  • 元标记是最好的方法,因为它将处理推送到浏览器上,而不是占用服务器资源 5 秒
  • 你好!我是已接受答案的所有者。但是,meta refresh 答案的赞成票数量让我认为可能值得不接受我的支持而支持另一个。

标签: php redirect


【解决方案1】:

您可以发送带有超时刷新的 php 标头。 http://php.net/manual/en/function.header.php

<?php 
  header( "refresh:5; url=wherever.php" ); 
?>

【讨论】:

  • 这比上面的解决方案更好,因为它不会阻塞php进程。
  • @krossovochkin 不需要停止应用程序,因为问题是如何延迟重定向,这意味着他想显示整个页面,然后重定向:)
【解决方案2】:

使用sleep()怎么样?

function method1(...) {

sleep(5);

... rest of the code

但请注意,更推荐使用Vahe Shadunts's answer,它使用header()。

【讨论】:

  • 这不会真正起作用,因为 sleep() 会阻止输出到页面(并保持线程在它运行时被占用)。最好的办法是为此使用某种形式的 javascript。
  • 这样会延迟重定向 5 秒吗?我会把它放在剧本的什么地方?
  • 是的,它会将重定向延迟 5 秒。您应该将它放在调用任何重定向方法之前,例如在 switch ($_REQUEST['attempt']) { 行之前。检查一下,@RickvanBodegraven 说的很有趣,我很好奇。
  • 那么我需要把它放在每一次尝试之上吗?由于该脚本中有 3 种方法,我需要把它放 3 次?
  • 这太奇怪了。我建议检查stackoverflow.com/questions/10998178/php-sleep-not-working,建议将set_time_limit(0); 放在开头。您也可以按照@Vahe Shadunts 的建议尝试使用header( "refresh:5; url=wherever.php" );。
【解决方案3】:

refresh 标头可以完成这项工作,但我想强调一些潜在问题:

  • HTTP 标准中没有指定。维基百科说:

    专有和非标准:由 Netscape 引入并被大多数 Web 浏览器支持的标头扩展。

    但它已经存在将近 20 年了,我不知道有任何浏览器不支持它(虽然找不到参考)

  • 某些浏览器不使用以refresh 重定向的页面上的缓存。它已在此处为 Internet Explorer 演示:http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/meta-refresh-causes-additional-http-requests.aspx 我可以在 Firefox 上重现它。 Chrome 没有这个问题。

替代方案:JavaScript

您可以在中间页面上添加一个 JavaScript,它会在 X 秒后打开一个新页面。在页面底部添加这个以在5 秒后重定向到http://www.example.com/target:

<script type="text/javascript">
    window.setTimeout(function() {
        window.location.href='http://www.example.com/target';
    }, 5000);
</script>

组合

作为奖励,如果 JS 被禁用,您可以回退到 refresh 标头,使用 meta 指令 http-equiv 告诉浏览器就像发送了某个 HTTP 标头一样。因为它是 HTML 源代码的一部分,所以您可以将其包装在 &lt;noscript&gt; 元素中。将此添加到您的 &lt;head&gt; 以及上面的 JavaScript:

<noscript>
    <meta http-equiv="refresh" content="5;url=http://www.example.com/target" />
</noscript>

现在,如果可用 JavaScript 以获得最佳性能,页面将使用 JavaScript 重定向,否则使用 refresh。

【讨论】:

    猜你喜欢
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 2022-01-04
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    相关资源
    最近更新 更多