[PHP]:页面为什么不重定向?

[PHP]:页面为什么不重定向?,php,Php,在下面的代码中,“header:”行给出了问题 $q = mysql_query($a) or die(mysql_error()); $row = mysql_fetch_array($q); $ValidationResponse = "false"; if ($_COOKIE['user_name'] != "") { while ($row) { if ($_COOKIE['user_name'] = $row['use

在下面的代码中,“header:”行给出了问题

  $q = mysql_query($a) or die(mysql_error());
  $row = mysql_fetch_array($q);

      $ValidationResponse = "false";

      if ($_COOKIE['user_name'] != "")
        {
  while ($row) {
      if ($_COOKIE['user_name'] = $row['username'])
      {
              $ValidationResponse = "true";
              break;
          }
      }
        if ($ValidationResponse == "true")
        {
            ob_start();
            header("location:personal_view.php");
            ob_clean();
        }
        else
            echo "<script>alert('Invalid Login. Try Again.');</script>";
        }
          $_COOKIE['user_name'] = "";
$q=mysql\u query($a)或die(mysql\u error());
$row=mysql\u fetch\u数组($q);
$ValidationResponse=“false”;
如果($\u COOKIE['user\u name']!=“”)
{
while($row){
如果($\u COOKIE['user\u name']=$row['username'])
{
$ValidationResponse=“true”;
打破
}
}
如果($ValidationResponse==“true”)
{
ob_start();
标题(“位置:personal_view.php”);
ob_clean();
}
其他的
回显“警报('登录无效。请重试');”;
}
$\u COOKIE['user\u name']=“”;

您应该将ob_start放在脚本的最开头 另外,我不确定这一点,但我总是看到位置头是这样写的

header("Location: location.php");

在冒号后加上大写字母L和空格的位置:“

我通常有三个有用的功能:

function redirect($url) {
  while (ob_end_clean()) ; // do nothing
  header("Location: " + $url);
  exit;
}

function reload() {
  redirect($_SERVER['REQUEST_URI']);
}

function reloadQS() {
  redirect($_SERVER['REQUEST_URI'] + '?' + $_SERVER['QUERY_STRING']);
}
上述方法可以正确地处理可能已经嵌套的输出缓冲区,但如果内容已经发送给用户,则将失败,而您对此无能为力。我建议使用上面的方法,否则你会用循环来清理缓冲区,这是没有意义的

您不正确地使用了输出缓冲,这就是它失败的原因。更改:

ob_start();
header("location:personal_view.php");
ob_clean();
致:


这听起来可能很愚蠢,但您确定在调用
header()
函数之前没有输出任何内容吗?Apache不会重定向,即使它在开始标记

ob_end_clean();
header("Location: personal_view.php");
exit;