Сомнения по использованию: header("Location: url");

SiMM

Новичок
> Берут IE,OPERA,FIREFOX,NETSCAPE
Начиная с каких версий? Плюс выписку с сылкой на RFC по HTTP в студию.
 

vadim

Guest
Автор оригинала: SiMM
Плюс выписку с сылкой на RFC по HTTP в студию.
Какая выписка на RFC?? :) Я думал, раз вы спрашиваете про браузеры, то понимаете, что это нестандартный хедер и нужно смотреть, как каждый браузер на него реагирует.
Понятно, что он не поддерживается официальным стандартом. Но к сожалению, браузеры не самый лучший пример того, как можно было бы следовать инструкциям. Но с другой стороны, наши приложения будут использовать юзеры именно с помощью этих самых браузеров, так что мы должны также и на них обращать внимание. И если они предлагают обработку "неофициального" хедера, так почему бы не воспользоватся этой возможностью??
 

SiMM

Новичок
> И если они предлагают обработку "неофициального" хедера, так почему бы не воспользоватся этой возможностью??
Потому что никто не обязан его поддерживать. И причин им пользоваться, в общем-то, нет.
PS: перечисленные вами браузеры - далеко не единственновозможные клиенты. Кроме того, на пути к клиенту могут существовать "злобные" прокси, режущие непонятные им нестандартные заголовки.
 

vadim

Guest
А причины пользоваться стандартом есть?? Это же не закон, и если браузеры не поддерживают стандарт, то нам от этого стандарта никакого проку нет
А какие есть ещё популярные браузеры?? Я только Safari знаю - но в нём не проверял.
Кстати этот Хедер изначально (вроде-я не уверен) идёт не из HTTP спецификации, а из META тегов HTML спецификации от W3C, покрайней мере он там присутствует, так что какому стандарту теперь доверять??
 

Andreika

"PHP for nubies" reader
<offtop>
>так что какому стандарту теперь доверять??
я лично Хедеры беру только CSS2, чего и вам советую.. а HTTP1.1 и HTML это уже не модно
</offtop>
 

SiMM

Новичок
> если браузеры не поддерживают стандарт...
... то такие браузеры идут в топку. Выбирайте выражения - "не поддерживают" и "дополняют" - абсолютно разные вещи. Нет этого в спецификации? Клиент не обязан это поддерживать. И приплетать сюда HTML бессмысленно - с точки зрения HTTP это лишь частный случай.
 

Фанат

oncle terrible
Команда форума
Гриша К.
Нужно отличать тех, кто отвечает по делу от тех, кто хочет блеснуть знаниями.
Вся проблема даже не в том, как этот заголовок будет работать.
А в том, что он тебе не нужен
 

vadim

Guest
Итог:
В любом случае Location работает везде (по крайней мере должен).
Refresh работает сейчас во многих браузерах, но могут возникнуть проблемы с "вредными" проксями и нестандартными браузерами + будущее развитие браузеров неизвестно (то есть неизвестно то, какие стандарты будут поддерживаться, но тенденция всё равно в сторону общепринятых HTTP и HTML)
Гриша К.
Выбирайте сами
Сделайте из этого свою функцию и вставляйте везде, если не понравится всегда можно будет в одном месте подправить
(Я лично только Location пользуюсь)
 

Гриша К.

Новичок
vadim, вам спасибо за то что вы рассказали об этом методе и что привели пример.
Пользователь SiMM мне уже раньше отвечал, ну короче я уже убедился в том, что у него большие знание в PHP, и также Фанат.
А я в <head></head> может быть сделаю. Просто в некоторых местах, хотелось бы применить не мгновенный редирект.

А вот я сдесь оставлю часть примера функции редиректа из форума phpbb. Помойму здесь они используют header
в 2-х вариантах для разных броузеров и ли операционных систем, ну короче для чего-то разного.
Я считаю что программистам phpbb форума можно доверять. Вот что они делаю, мне то конечно это непонятно.

PHP:
	// Redirect via an HTML form for PITA webservers
	if (@preg_match('/Microsoft|WebSTAR|Xitami/', getenv('SERVER_SOFTWARE')))
	{
		header('Refresh: 0; URL=' . $server_protocol . $server_name . $server_port . $script_name . $url);
		echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><meta http-equiv="refresh" content="0; url=' . $server_protocol . $server_name . $server_port . $script_name . $url . '"><title>Redirect</title></head><body><div align="center">If your browser does not support meta redirection please click <a href="' . $server_protocol . $server_name . $server_port . $script_name . $url . '">HERE</a> to be redirected</div></body></html>';
		exit;
	}

	// Behave as per HTTP/1.1 spec for others
	header('Location: ' . $server_protocol . $server_name . $server_port . $script_name . $url);
	exit;
 

Гриша К.

Новичок
vovanium, ну по поводу header, мне здесь все уже подсказли и вдругой теме еще разяъснили. Так что все порядке.
По поводу дырявости незнаю. Но им очень много людей пользуется сейчас, есть официальный сайт поддержки на русском, вроде бы у них щас все впорядке. Я на это надеюсь.
 

PartizaneN

I speak PHP
Автор оригинала: Гриша К.
vovanium, ну по поводу header, мне здесь все уже подсказли и вдругой теме еще разяъснили. Так что все порядке.
По поводу дырявости незнаю. Но им очень много людей пользуется сейчас, есть официальный сайт поддержки на русском, вроде бы у них щас все впорядке. Я на это надеюсь.
Бывают случаи, когда в виду неповоротливости движка, либо чисто лени может получится так, что если не будет редиректа, загрузится инфа, о которой простому смертному знать не нужно...

Например, в админке - проверили - неавторизован - редирект... Злобные хакеры сделали, чтоб бравзер не заредиректил - тебе *опа...

пс. Для нестандартных бравзеров - обычно после хедера у меня стоит die()... Неэлегантное решение, конечно...
 

Фанат

oncle terrible
Команда форума
Я считаю что программистам phpbb форума можно доверять.
Ты неправильно считаешь.
Доверять надо только себе.
А код не использовать, как икону, а разбираться в нём.
 

Гриша К.

Новичок
PartizaneN, спасибо за разъяснение. Я даже видел здесь на форуме, если не ошибасюь то помойму SiMM тоже говорил про возможность использования die().

Фанат. Я только себе доверяю. Но в программировании знаю мало, поэтому получается, что доверяю тем кто знает больше. Я вот слушаю вас когда вы мне отвечаете в топиках на мои вопросы, получается, что в данный момент я доверяю вам, и благодаря этому я начинаю разбираться в том что вы мне подсказали.
Данный код phpbb я не использую.
Хотя использую полностью их класс temlate, всетаки давно они его используют, мне сним очень удобно.

В коде надо разбираться, это конечно надо, но не всегда получается. Вот я когда делал этим летом интернет магазин, я вам еще все время отвечал, что мне нужен лиш готовый результат, и мне не надо его понимать, и я сделал правильно, потому что благодаря этому я сделал интернет магазин, а сейчас уже я все понимаю в коде магазина, и теперь начинаю видеть много погрешностей.
Ну а сейчас, например я просто не могу брать какой-то код, практически полностью в нем неразбираясь, ну хотя бы понимая все.
Поэтому я вот сейчас столько вопросов начал задавать, тем более что делаю скрипт регистрации пользователей, ну сейчас я хоть все понимаю что делаю.

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

Фанат

oncle terrible
Команда форума
ты там видишь строчку SERVER_SOFTWARE
надо пойти в документацию и посмотреть, что она означает.
 

Гриша К.

Новичок
Узнал.
echo $_SERVER["SERVER_SOFTWARE"];

Apache/1.3.34 (Win32) PHP/4.3.0
выдает имя сервера.

Значит там идет проверка если имя сервера содержит Microsoft или WebSTAR или Xitami, то тогда выполняется данное условие.
Если я правильно понимаю, то этот данный вариант, предусмотрен для случаев, если форум устанавливается на сервера с такими именами.
Точно, я тут прочитал про функцию getenev и про то что, php может ставиться на разные сервера.
А я видел это if (@preg_match('/Microsoft|WebSTAR|Xitami/', getenv('SERVER_SOFTWARE')))
и решил, что как-то заморочено работается с функцией header(), испугался ее использовать.
Спасибо вам Фанат, теперь мне все ясно с данным кодом phpbb.

В заключении темы, что смонения по использованию функции header('Location: http://'.$_SERVER['HTTP_HOST']) развеяны окончательно.
По поводу header мне еще _RVK_ подробно все рассказал, там есть примеры и ссылки он мне оставлял там полезные, так что для тех у кого будут сомнения или непонимание, также читайте тему начиная с этого сообщения http://phpclub.ru/talk/showthread.php?postid=586368#post586368
 
Сверху