Всем привет. Нужно использовать перенаправление. Решил передавать заголовки header('Location:...')
Но говорят что эту функцию можно использовать только перед выводом любых тегов и использования incluide require.
А мне перед отправкой заголовка нужно использовать require для подключения PHP модуля.
Как быть?(работает нормально, пробовал, ошибок не выводит)
1. Budulianin - 12 Мая, 2011 - 11:29:48 - перейти к сообщению
2. grefon - 12 Мая, 2011 - 11:32:10 - перейти к сообщению
Пользуйтесь и не переживайте. Заголовки нельзя выдавать только после того, как Вы что-то отправили в браузер, а если подгружаете скрипт то можно.
3. EuGen - 12 Мая, 2011 - 11:32:47 - перейти к сообщению
Перед любым выводом.
grefon, поправка - если в подключаемом в include или require вывода не проиходит - можно подключать (не знаю, с чего автор взял, что нельзя)
grefon, поправка - если в подключаемом в include или require вывода не проиходит - можно подключать (не знаю, с чего автор взял, что нельзя)
4. Budulianin - 12 Мая, 2011 - 11:33:43 - перейти к сообщению
grefon пишет:
Пользуйтесь и не переживайте. Заголовки нельзя выдавать только после того, как Вы что-то отправили в браузер, а если подгружаете скрипт то можно.
Спасибо я так и думал =)
(Добавление)
EuGen пишет:
Перед любым выводом.
grefon, поправка - если в подключаемом в include или require вывода не проиходит - можно подключать (не знаю, с чего автор взял, что нельзя)
grefon, поправка - если в подключаемом в include или require вывода не проиходит - можно подключать (не знаю, с чего автор взял, что нельзя)
Просто я думал вообще использовать require и include нельзя
5. Мелкий - 12 Мая, 2011 - 11:35:30 - перейти к сообщению
0) у header требование только одно - перед ним не должно быть вывода в браузер. Поэтому можно использовать инклюды, если в них ничего не выводится.
1) буферизация, можно использовать всё, что угодно. См функции ob_start и др.
2) в >=php5.3 ограничение на header снято (видимо, используется всё та же буферизация).
1) буферизация, можно использовать всё, что угодно. См функции ob_start и др.
2) в >=php5.3 ограничение на header снято (видимо, используется всё та же буферизация).
6. EuGen - 12 Мая, 2011 - 11:42:48 - перейти к сообщению
Мелкий пишет:
в >=php5.3 ограничение на header снято (видимо, используется всё та же буферизация).
Верно. Но я лично не приветствую такое поведение. Неявность буферизации при высылке заголовков может привести к неожиданным результатам, которые может быть сложно понять при отладке.
7. Budulianin - 12 Мая, 2011 - 11:45:21 - перейти к сообщению
Всем спасибо =) как всегда быстро и в тему!
8. grefon - 12 Мая, 2011 - 11:49:19 - перейти к сообщению
EuGen пишет:
Но я лично не приветствую такое поведение.
А почему с точки зрения разработки так принципиально отсылать заголовки перед контентом? Любой браузер и так понимает строки заголовка страницы и скрывает их, оставляя видимым только сам код, так чем руководствовались разработчики когда придумали такое условие?
9. EuGen - 12 Мая, 2011 - 11:52:18 - перейти к сообщению
Чем вызвано условие отсылки заголовков до вывода, думаю, и так понятно.
А по поводу того, почему плохо неявно переопределять и отсылать заголовки, где бы они ни были написаны в скрипте - это в некотором смысле нарушает логику, заложенную программистом.
Гораздо более правильным мне кажется самостоятельно заботиться об этом, что дает четкое понимание того, где и в какой момент в скрипте формируются заголовки и как они отсылаются.
А по поводу того, почему плохо неявно переопределять и отсылать заголовки, где бы они ни были написаны в скрипте - это в некотором смысле нарушает логику, заложенную программистом.
Гораздо более правильным мне кажется самостоятельно заботиться об этом, что дает четкое понимание того, где и в какой момент в скрипте формируются заголовки и как они отсылаются.
10. grefon - 12 Мая, 2011 - 11:56:08 - перейти к сообщению
EuGen пишет:
Гораздо более правильным мне кажется самостоятельно заботиться об этом, что дас четкое понимание того, где и в какой момент в скрипте формируются заголовки и как они отсылаются.
С этим абсолютно согласен, хотя иногда бывали моменты когда, заказчик просил переделать скрипт и надо было те же куки поставить по условию, перед которым большая куча уже отправлялась в браузер - вот тут и приходилось переделывать все с нуля. А жаль
EuGen пишет:
Чем вызвано условие отсылки заголовков до вывода, думаю, и так понятно.
Честно говоря мне не понятно
11. EuGen - 12 Мая, 2011 - 12:11:43 - перейти к сообщению
Потому что
http://www[dot]w3[dot]org/Protocols/rfc2[dot][dot][dot]6-sec6[dot]html#sec6
Вкратце, по протоколу HTTP 1.1 ответ сервера должен содержать сначала заголовки, а затем тело.
Иными словами, если будет тело вперемешку с заголовками, то это будет что угодно, но не RESPONSE по протоколу HTTP
Да и если логично подумать - в заголовках же идут например, кодировки, способ отображения тела, скажем, скачивать или нет, тип контента и т.п. Как браузеру можно что-либо обработать, не зная как это делать (и что это вообще).
http://www[dot]w3[dot]org/Protocols/rfc2[dot][dot][dot]6-sec6[dot]html#sec6
Вкратце, по протоколу HTTP 1.1 ответ сервера должен содержать сначала заголовки, а затем тело.
Иными словами, если будет тело вперемешку с заголовками, то это будет что угодно, но не RESPONSE по протоколу HTTP
Да и если логично подумать - в заголовках же идут например, кодировки, способ отображения тела, скажем, скачивать или нет, тип контента и т.п. Как браузеру можно что-либо обработать, не зная как это делать (и что это вообще).
12. Мелкий - 12 Мая, 2011 - 12:11:55 - перейти к сообщению
grefon пишет:
Честно говоря мне не понятно
Требование протокола HTTP: сперва - все заголовки, разделённые \r\n, потом двойной \r\n и тело документа с любым содержанием.
13. grefon - 12 Мая, 2011 - 12:22:45 - перейти к сообщению
Понял, большое спасибо!