Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Header('Location:...') после require
Покинул форум
Сообщений всего: 132
Дата рег-ции: Окт. 2010
Помог: 0 раз(а)
Всем привет. Нужно использовать перенаправление. Решил передавать заголовки header('Location:...')
Но говорят что эту функцию можно использовать только перед выводом любых тегов и использования incluide require.
А мне перед отправкой заголовка нужно использовать require для подключения PHP модуля.
Как быть?(работает нормально, пробовал, ошибок не выводит)
grefon
Отправлено: 12 Мая, 2011 - 11:32:10
Частый посетитель
Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010
Помог: 32 раз(а)
Пользуйтесь и не переживайте. Заголовки нельзя выдавать только после того, как Вы что-то отправили в браузер, а если подгружаете скрипт то можно.
----- ____________________________________________________________________
Ну как то так, наверное. http://grefon[dot]com
EuGen
Отправлено: 12 Мая, 2011 - 11:32:47
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Перед любым выводом.
grefon, поправка - если в подключаемом в include или require вывода не проиходит - можно подключать (не знаю, с чего автор взял, что нельзя)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Budulianin
Отправлено: 12 Мая, 2011 - 11:33:43
Частый гость
Покинул форум
Сообщений всего: 132
Дата рег-ции: Окт. 2010
Помог: 0 раз(а)
grefon пишет:
Пользуйтесь и не переживайте. Заголовки нельзя выдавать только после того, как Вы что-то отправили в браузер, а если подгружаете скрипт то можно.
Спасибо я так и думал =) (Добавление)
EuGen пишет:
Перед любым выводом.
grefon, поправка - если в подключаемом в include или require вывода не проиходит - можно подключать (не знаю, с чего автор взял, что нельзя)
Просто я думал вообще использовать require и include нельзя
Мелкий
Отправлено: 12 Мая, 2011 - 11:35:30
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
0) у header требование только одно - перед ним не должно быть вывода в браузер. Поэтому можно использовать инклюды, если в них ничего не выводится.
1) буферизация, можно использовать всё, что угодно. См функции ob_start и др.
2) в >=php5.3 ограничение на header снято (видимо, используется всё та же буферизация).
----- PostgreSQL DBA
EuGen
Отправлено: 12 Мая, 2011 - 11:42:48
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Мелкий пишет:
в >=php5.3 ограничение на header снято (видимо, используется всё та же буферизация).
Верно. Но я лично не приветствую такое поведение. Неявность буферизации при высылке заголовков может привести к неожиданным результатам, которые может быть сложно понять при отладке.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Budulianin
Отправлено: 12 Мая, 2011 - 11:45:21
Частый гость
Покинул форум
Сообщений всего: 132
Дата рег-ции: Окт. 2010
Помог: 0 раз(а)
Всем спасибо =) как всегда быстро и в тему!
grefon
Отправлено: 12 Мая, 2011 - 11:49:19
Частый посетитель
Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010
Помог: 32 раз(а)
EuGen пишет:
Но я лично не приветствую такое поведение.
А почему с точки зрения разработки так принципиально отсылать заголовки перед контентом? Любой браузер и так понимает строки заголовка страницы и скрывает их, оставляя видимым только сам код, так чем руководствовались разработчики когда придумали такое условие?
----- ____________________________________________________________________
Ну как то так, наверное. http://grefon[dot]com
EuGen
Отправлено: 12 Мая, 2011 - 11:52:18
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Чем вызвано условие отсылки заголовков до вывода, думаю, и так понятно.
А по поводу того, почему плохо неявно переопределять и отсылать заголовки, где бы они ни были написаны в скрипте - это в некотором смысле нарушает логику, заложенную программистом.
Гораздо более правильным мне кажется самостоятельно заботиться об этом, что дает четкое понимание того, где и в какой момент в скрипте формируются заголовки и как они отсылаются.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
grefon
Отправлено: 12 Мая, 2011 - 11:56:08
Частый посетитель
Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010
Помог: 32 раз(а)
EuGen пишет:
Гораздо более правильным мне кажется самостоятельно заботиться об этом, что дас четкое понимание того, где и в какой момент в скрипте формируются заголовки и как они отсылаются.
С этим абсолютно согласен, хотя иногда бывали моменты когда, заказчик просил переделать скрипт и надо было те же куки поставить по условию, перед которым большая куча уже отправлялась в браузер - вот тут и приходилось переделывать все с нуля. А жаль
EuGen пишет:
Чем вызвано условие отсылки заголовков до вывода, думаю, и так понятно.
Честно говоря мне не понятно
----- ____________________________________________________________________
Ну как то так, наверное. http://grefon[dot]com
EuGen
Отправлено: 12 Мая, 2011 - 12:11:43
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Потому что http://www[dot]w3[dot]org/Protocols/rfc2[dot][dot][dot]6-sec6[dot]html#sec6
Вкратце, по протоколу HTTP 1.1 ответ сервера должен содержать сначала заголовки, а затем тело.
Иными словами, если будет тело вперемешку с заголовками, то это будет что угодно, но не RESPONSE по протоколу HTTP
Да и если логично подумать - в заголовках же идут например, кодировки, способ отображения тела, скажем, скачивать или нет, тип контента и т.п. Как браузеру можно что-либо обработать, не зная как это делать (и что это вообще).
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Мелкий
Отправлено: 12 Мая, 2011 - 12:11:55
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
grefon пишет:
Честно говоря мне не понятно
Требование протокола HTTP: сперва - все заголовки, разделённые \r\n, потом двойной \r\n и тело документа с любым содержанием.
----- PostgreSQL DBA
grefon
Отправлено: 12 Мая, 2011 - 12:22:45
Частый посетитель
Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.