繁体   English   中英

PHP问题与sleep()和重定向

[英]PHP issue with sleep() and redirect

我有以下哑代码:

<?

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秒然后将我发送到该位置。 我做错了什么?

这不行。 因为第一个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刷新

注意: 不推荐使用元刷新(尽管我已在示例中显示)。 建议使用HTTP刷新标头。

你需要做一些事情(这不起作用):

<?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>"
?>

但为了安全起见,你应该添加标题和元标记!

PHP文档

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

所以你不能在echo之后使用header()函数。

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

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

不需要缓冲和脚本睡眠。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM