标头位置延迟

时间:2012-07-02 18:17:13

标签: php

我有以下PHP代码,我也想添加延迟:

<?php
    echo "Message has been sent.";
    header("Location: page2.php", true, 303);
    exit;
?>

上面的代码发生得太快,所以我看不到消息:

我试过了:

<?php
    sleep(5);
    echo "Message has been sent.";
    header("Location: page2.php", true, 303);
    exit;
?>

这也不显示消息,但它会睡5秒,这只是浪费时间。

如何在重定向之前让它显示5秒的消息?

7 个答案:

答案 0 :(得分:30)

您无法通过HTTP位置重定向执行此操作,因为只要浏览器获得标头,就会发生此重定向。而是在标题中使用刷新重定向:

header( "Refresh:5; url=http://www.example.com/page2.php", true, 303);

应该在现代浏览器上运行,但它不是标准化的,因此要获得等效功能,请使用元刷新重定向(意味着您还必须输出完整的HTML) :

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

来自the Wikipedia page

  

用于重定向,或者在创建新资源时使用。这个   X秒后刷新重定向。这是一种专有的,非标准的   由Netscape引入并由大多数网络支持的标头扩展   浏览器。

答案 1 :(得分:3)

使用客户端脚本执行重定向:

<script>
window.setTimeout(function() {
    window.location = 'page2.php';
  }, 5000);
</script>
<p>Message has been sent.</p>

答案 2 :(得分:3)

你必须像这样修改你的代码:

<?php

    echo "Message has been sent.";
    sleep(5);
    header("Location: page2.php", true, 303);
    exit;
?>

答案 3 :(得分:2)

如果您使用标头(位置)重定向,则无法看到该消息。事实上,由于输出在发送标头之前开始,因此该重定向根本不起作用。相反,您应该使用延迟回显元标记刷新,如下所示 echo '<meta http-equiv="refresh" content="5;URL=\'http://example.com/\'">';

这将延迟五秒钟。或者,(并且更恰当地)您可以输出JS重定向,因为不推荐使用元刷新标记。

答案 4 :(得分:0)

我不知道它是否有帮助,但由于我在提交消息后需要清理的形式处理相同的问题,我发现这个答案解释了你可以改变输入的值是空。

这就是答案: How do I reset the value of a text input when the page reloads?

这就是我使用我的类.form-control

解决我的问题的方法
$(document).ready(function() {
   $(".form-control").val('');
});

答案 5 :(得分:0)

header( "Refresh:time; url='filelocation'");

答案 6 :(得分:0)

这对我有用...我正在Windows的WAMPP上使用最新的PHP版本7.3.3 ...

<?php

$name = $_POST['name'] ?? null; 

if(empty(trim($name))){
    header("location: http://localhost/testsite/index.php");
}

echo 'Greetings '. $_POST['name'].', how can I help you?';

echo '<meta http-equiv="refresh" content="5;URL=\'http://localhost/testsite/index.php\'">';

我希望这会有所帮助。