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

时间:2009-10-31 04:03:12

标签: 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['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'] = "";

3 个答案:

答案 0 :(得分:2)

我倾向于拥有三个有用的功能:

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();

为:

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

答案 1 :(得分:0)

您应该将ob_start放在脚本的最开头 此外,我不确定这一点,但我总是看到以这种方式写的位置标题

header("Location: location.php");

大写字母L的位置“冒号”之后的空格

答案 2 :(得分:0)

这可能听起来很愚蠢,但您确定在header()函数调用之前没有输出任何内容吗?即使在脚本中的起始标记<?php之前找到换行符,Apache也不会重定向。