2010-11-28 3 views
0

Есть ли способ перенаправления страниц в PHP без использования header('Location:'.''); becouse всегда создают проблемы с сессиями (: Не удается отправить кэш-ограничитель сеанса - заголовки уже прислал)Перенаправление страницы в PHP

+0

Он никогда не делать какие-либо проблем с сессиями. «Расположение» HTTP-заголовок - единственный правильный способ. Хотя вы все равно получите свой хромой ответ, просто потому, что этот сайт сосет – 2010-11-28 13:37:22

+0

@Col. Шрапнель. Это так. Неопытные кодеры, как правило, всегда избавляются от симптомов, а не от причины. Нам нужно научить их понимать это прямо. – aefxx 2010-11-28 13:43:45

ответ

3

Есть другие варианты для перенаправления в HTML (например, с использованием META или JavaScript). Но это не правильное перенаправление HTTP.

Так что вместо поиска альтернативы вам лучше использовать HTTP-вариант. В этом случае вы можете изменить только HTTP-заголовок, если он еще не был отправлен. И это происходит всякий раз, когда вы делаете какой-либо вывод (явно или неявно). Вы можете предотвратить это путем буферизации вывода вызова управления Выходов, ob_startперед тем любой выход, что произошло, возможно, непосредственно в начале файла сценария вы запросили:

<?php 
ob_start(); 

// rest of the file 

Убедитесь, что нет ничего перед открытием PHP-тег <?php как пустые строки или UTF BOM.

2

Нет, без header вам не повезло (вы можете использовать mod_rewrite от Apache, но это произойдет до того, как ваш файл даже коснется).

Почему бы не использовать ob_start (выходная буферизация). См. PHP manual для быстрого запуска.

Успехов

1

Как уже упоминалось ранее использование ob_start() справа на самом верху страницы приложения. Не выполняйте изворотливые функции javascript, упомянутые в других ответах, я бы сказал, что они очень плохие практики. PHP уже давно существует, поэтому он проверен и работает, вы можете иметь ошибочное пустое пространство или выводить что-то в браузер, а затем пытаться изменить информацию заголовка, которую вы не можете сделать. Итак:

использование ob_start чека на ошибочное белое пространство и удалить его

Смежные вопросы