Php重定向不起作用

时间:2014-01-09 17:40:39

标签: php

我正在用php mvc做一个项目,但没有框架。我以这种方式组织文件:

  • 目录公开:可以从外部访问文件
  • 目录视图:有文件.php但基本上只有html
  • Direcory Model:包含与数据库连接相关的文件,以及定义对象的类,例如,User.php类
  • 目录控制器:包含“通用”类控制器和控制器类更“特定”

我创建了一个登录页面(View / login.php),其中包含一个动作值为public / index.php的表单。在index.php中有以下代码:

$controller = new LoginController();
$view = $controller->invoke();
$view->render();

invoke()是Controller / LoginController.php中的一个函数,它读取用户输入的数据并控制它们,如果它们是正确的(数据库中有用户使用用户名和密码)则创建两个全局变量,重定向:

 $_SESSION['logged_in'] = 1;
 $_SESSION['username'] = $username;
 $url = "../public/home.php";
 header("Location: $url", true, 302);
 exit();

public / home.php这样做:

$controller = new HomeController();
$view = $controller->invoke();
$view->render();

HomeController是一个扩展Controller的类。 Controller的构造函数查看是否存在变量$ _SESSION ['logged_in']和$ _SESSION ['username']。 如果它们不存在,则会重定向到public / index.php。

我的问题是带标题的行(“refresh:0; url = .. / public / home.php”);没有重定向。

说明:当我插入正确的数据(注册用户)重定向一小段时间,然后返回home.php。 相反,它应该重定向到home.php并留在那里,不要去index.php。

我也试过header("refresh: 0; url = ../public/home.php");,但这也是同样的问题。

我该如何解决这个问题? 谢谢,抱歉我的英语不好!

1 个答案:

答案 0 :(得分:3)

在页面顶部添加php ob_start()功能。如果在另一个ob_start()处于活动状态时调用ob_start()。只需确保调用ob_end_flush()适当的次数。如果多个输出回调函数处于活动状态,则将按嵌套顺序依次对每个输出回调函数进行过滤。

参考:http://in2.php.net/ob_start