PHP - 重定向延迟

Cus*_*Net 4 php redirect

我正在使用以下代码作为null引用脚本的一种形式,它可以很好地工作,但它只是将它们直接重定向到目标URL.

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

Vah*_*nts 62

您可以使用超时刷新发送php标头.http://php.net/manual/en/function.header.php

<?php 
  header( "refresh:5; url=wherever.php" ); 
?>
Run Code Online (Sandbox Code Playgroud)


fed*_*qui 6

那么使用sleep()呢?

function method1(...) {

sleep(5);

... rest of the code
Run Code Online (Sandbox Code Playgroud)

但请注意,建议使用Vahe Shadunts的答案,而header()不是使用它.

  • 这不会真正起作用,因为sleep()将阻止输出到页面(并保持线程占用它).最好的办法是使用某种形式的javascript. (2认同)

Fab*_*ler 6

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,我可以在火狐。Chrome 没有这个问题。

替代方案:JavaScript

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

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

组合

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

<noscript>
    <meta http-equiv="refresh" content="5;url=http://www.example.com/target" />
</noscript>
Run Code Online (Sandbox Code Playgroud)

现在,页面会使用 JavaScript 重定向以获得最佳性能,refresh否则会使用其他方式。