2

我有以下愚蠢的代码:

<?

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

4 回答 4

6

这行不通。因为第一个回显会开始输出。之后,标头调用将失败。但是,您可以在 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 刷新标头。

于 2012-09-06T11:22:28.340 回答
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 秒后更改为提供的 url

为避免添加元标记,您还可以这样做:

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

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

于 2012-09-06T11:22:04.537 回答
1

来自PHP 文档

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

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

我建议您改用 javascript 或元标记。

于 2012-09-06T11:30:58.717 回答
-1

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

不需要缓冲和脚本睡眠。

于 2012-09-06T11:26:04.047 回答