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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Budulianin
Отправлено: 12 Мая, 2011 - 11:29:48
Post Id



Частый гость


Покинул форум
Сообщений всего: 132
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Всем привет. Нужно использовать перенаправление. Решил передавать заголовки header('Location:...')

Но говорят что эту функцию можно использовать только перед выводом любых тегов и использования incluide require.

А мне перед отправкой заголовка нужно использовать require для подключения PHP модуля.

Как быть?(работает нормально, пробовал, ошибок не выводит)
 
 Top
grefon
Отправлено: 12 Мая, 2011 - 11:32:10
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




Пользуйтесь и не переживайте. Заголовки нельзя выдавать только после того, как Вы что-то отправили в браузер, а если подгружаете скрипт то можно.


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
EuGen Администратор
Отправлено: 12 Мая, 2011 - 11:32:47
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Перед любым выводом.
grefon, поправка - если в подключаемом в include или require вывода не проиходит - можно подключать (не знаю, с чего автор взял, что нельзя)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Budulianin
Отправлено: 12 Мая, 2011 - 11:33:43
Post Id



Частый гость


Покинул форум
Сообщений всего: 132
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




grefon пишет:
Пользуйтесь и не переживайте. Заголовки нельзя выдавать только после того, как Вы что-то отправили в браузер, а если подгружаете скрипт то можно.


Спасибо я так и думал =)
(Добавление)
EuGen пишет:
Перед любым выводом.
grefon, поправка - если в подключаемом в include или require вывода не проиходит - можно подключать (не знаю, с чего автор взял, что нельзя)


Просто я думал вообще использовать require и include нельзя
 
 Top
Мелкий Супермодератор
Отправлено: 12 Мая, 2011 - 11:35:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




0) у header требование только одно - перед ним не должно быть вывода в браузер. Поэтому можно использовать инклюды, если в них ничего не выводится.
1) буферизация, можно использовать всё, что угодно. См функции ob_start и др.
2) в >=php5.3 ограничение на header снято (видимо, используется всё та же буферизация).


-----
PostgreSQL DBA
 
 Top
EuGen Администратор
Отправлено: 12 Мая, 2011 - 11:42:48
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Мелкий пишет:
в >=php5.3 ограничение на header снято (видимо, используется всё та же буферизация).

Верно. Но я лично не приветствую такое поведение. Неявность буферизации при высылке заголовков может привести к неожиданным результатам, которые может быть сложно понять при отладке.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Budulianin
Отправлено: 12 Мая, 2011 - 11:45:21
Post Id



Частый гость


Покинул форум
Сообщений всего: 132
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Всем спасибо =) как всегда быстро и в тему!
 
 Top
grefon
Отправлено: 12 Мая, 2011 - 11:49:19
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




EuGen пишет:
Но я лично не приветствую такое поведение.

А почему с точки зрения разработки так принципиально отсылать заголовки перед контентом? Любой браузер и так понимает строки заголовка страницы и скрывает их, оставляя видимым только сам код, так чем руководствовались разработчики когда придумали такое условие?


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
EuGen Администратор
Отправлено: 12 Мая, 2011 - 11:52:18
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Чем вызвано условие отсылки заголовков до вывода, думаю, и так понятно.
А по поводу того, почему плохо неявно переопределять и отсылать заголовки, где бы они ни были написаны в скрипте - это в некотором смысле нарушает логику, заложенную программистом.
Гораздо более правильным мне кажется самостоятельно заботиться об этом, что дает четкое понимание того, где и в какой момент в скрипте формируются заголовки и как они отсылаются.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
grefon
Отправлено: 12 Мая, 2011 - 11:56:08
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




EuGen пишет:
Гораздо более правильным мне кажется самостоятельно заботиться об этом, что дас четкое понимание того, где и в какой момент в скрипте формируются заголовки и как они отсылаются.

С этим абсолютно согласен, хотя иногда бывали моменты когда, заказчик просил переделать скрипт и надо было те же куки поставить по условию, перед которым большая куча уже отправлялась в браузер - вот тут и приходилось переделывать все с нуля. А жаль Хм

EuGen пишет:
Чем вызвано условие отсылки заголовков до вывода, думаю, и так понятно.

Честно говоря мне не понятно Закатив глазки


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
EuGen Администратор
Отправлено: 12 Мая, 2011 - 12:11:43
Post Id


Профессионал


Покинул форум
Сообщений всего: 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
Да и если логично подумать - в заголовках же идут например, кодировки, способ отображения тела, скажем, скачивать или нет, тип контента и т.п. Как браузеру можно что-либо обработать, не зная как это делать (и что это вообще).


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 12 Мая, 2011 - 12:11:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




grefon пишет:
Честно говоря мне не понятно

Требование протокола HTTP: сперва - все заголовки, разделённые \r\n, потом двойной \r\n и тело документа с любым содержанием.


-----
PostgreSQL DBA
 
 Top
grefon
Отправлено: 12 Мая, 2011 - 12:22:45
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




Понял, большое спасибо!

(Отредактировано автором: 12 Мая, 2011 - 12:24:29)



-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB