PHP问题与sleep()和重定向

时间:2012-09-06 11:19:10

标签: php

我有以下愚蠢的代码:

<?

echo "<html><br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p></div></html>";
sleep(6);
header('Location: http://google.com/');

?>

为什么HTML代码片段在睡眠6秒后显示在浏览器中然后重定向?代码根本不输出HTML代码,等待6秒然后将我发送到该位置。我做错了什么?

4 个答案:

答案 0 :(得分:6)

这不起作用。因为第一个echo会开始输出。之后,标题调用将失败。但是你可以在PHP端使用刷新标题来完成它。

<?php
header('Refresh: 5;URL=http://www.google.com/'); // refresh header
echo "<html><head>";
// meta refresh
echo "<meta http-equiv=\"refresh\" content=\"5;URL=http://www.google.com/\" />"; 
echo "</head><body><br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p></div></body></html>";
?>
<script type="text/javascript">
// javascript refresh
window.setTimeout(function(){
    location.href="http://www.google.com";
},5000);
</script>

在上面的脚本中,处理了3件事。

  1. HTTP刷新标头
  2. 元刷新
  3. Javascript刷新
  4. 注意:元刷新为deprecated(虽然我已在示例中显示)。建议使用HTTP刷新标头。

答案 1 :(得分:3)

您需要做类似的事情(这不起作用):

<?php

echo "<html><br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p></div></html>";
@ob_flush(); //flush the output buffer
flush(); //flush anything else
sleep(6); //wait
header('Location: http://google.com/'); //redirect

?>

然而:发送内容后,不会按预期工作您无法重定向浏览器(PHP会抛出错误并告知你这个)

相反,你应该:

<?php

echo "<html><meta http-equiv=\"refresh\" content=\"6;URL='http://YOURURL.com/'\"><br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p></div></html>";

?>

<meta http-equiv="refresh" content="6;URL='http://YOURURL.com/'">标记是HTML标记,用于告知浏览器在6秒后更改为提供的网址

为避免添加元标记,您还可以执行此操作:

<?php
header('Refresh: 6;URL=http://www.YOURURL.com/');
echo "<html><br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p></div></html>"
?>

但要安全,您应该添加标头和元标记!

答案 2 :(得分:1)

来自PHP documentation

  

请记住,在任何实际输出之前必须调用header()   通过普通HTML标记,文件中的空行或PHP发送。   使用include或require读取代码是一个非常常见的错误,   函数或其他文件访问函数,并且有空格或空   调用header()之前输出的行。一样的问题   使用单个PHP / HTML文件时存在。

因此,您无法在 echo 之后使用标头()功能。

我建议你改用javascript或meta标签。

答案 3 :(得分:-1)

我认为你在寻找header('Refresh: 6; url=http://google.com/');做重定向

不需要缓冲和脚本睡眠。