我有以下愚蠢的代码:
<?
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秒然后将我发送到该位置。我做错了什么?
答案 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件事。
注意:元刷新为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)
请记住,在任何实际输出之前必须调用header() 通过普通HTML标记,文件中的空行或PHP发送。 使用include或require读取代码是一个非常常见的错误, 函数或其他文件访问函数,并且有空格或空 调用header()之前输出的行。一样的问题 使用单个PHP / HTML文件时存在。
因此,您无法在 echo 之后使用标头()功能。
我建议你改用javascript或meta标签。
答案 3 :(得分:-1)
我认为你在寻找header('Refresh: 6; url=http://google.com/')
;做重定向
不需要缓冲和脚本睡眠。