2014-01-09 5 views
1

Я делаю проект в php mvc, но без рамки. Я организовал файлы таким образом: общественностьPhp redirect не работает

  • Каталога: есть файлы доступны от внешнего
  • Каталога Вида: есть файлы .php, но в основном только HTML
  • Direcory Модель: содержит файлы, связанные с соединение с базой данных, и классы, которые определяют объекты, например, класс User.php
  • контроллер
  • Каталог: содержит «общий» класс контроллера и классы контроллеров более «конкретных»

Создает страницу входа (View/login.php) с формой, значение действия которой public/index.php. В index.php есть этот код:

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

Invoke() является функцией в контроллер/LoginController.php, который считывает данные, введенные пользователем, и управляет ими, если они являются правильными (есть пользователь в базы данных с именем пользователя и пароль), а затем создает две глобальные переменные и сделайте редирект:

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

общественности/home.php делает это:

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

HomeController это класс, который расширяет контроль лер. Конструктор 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");, но это та же проблема.

Как я могу решить эту проблему? Спасибо и извините за моего бедного английского!

ответ

2

Добавить php ob_start() Функция на верхней части страницы. Если вы вызываете ob_start(), в то время как другой объект ob_start() активен. Просто убедитесь, что вы вызываете ob_end_flush() соответствующее количество раз. Если активны несколько функций обратного вызова, выходной сигнал последовательно фильтруется через каждый из них в порядке вложенности.

Ref: http://in2.php.net/ob_start

+0

Я изменил код, добавив 'ob_start();' сразу после ' user245679

+0

'ob_end_flush();' add before 'exit()' или удалить 'ob_end_flush();' и проверить –

+0

Я добавляю 'ob_end_flush();' также перед 'exit()' но это одно и то же ... – user245679