[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: работа header, перенаправление внутри функции
ячсмит
<?php
if($_GET['action'] == "out")
{
header('Location: http://www.google.ru/');
}

if (authorized())
{
header('Location: http://www.yandex.ru/');
}

else
{
echo 'PHP';
}

function authorized () {

header('Location: http://www.rambler.ru/');
return true;
}
?>


Подскажите, как работают header :
При передаче action=out перенаправляет на Яндекс. Почему не на гугл? Разве не должно быть перенаправления до выполнения последующего кода ?
Или php собирает все заголовки, удовлетворяющие условиям и потом посылает? Тогда возникает такой вопрос:

почему такой код при return false перенаправляет на Рамблер? (т.е. выполняется header внутри функции), а при return true на яндекс (header внутри функции не выполняется)?


<?php
if (authorized())
{
header('Location: http://www.yandex.ru/');
}

else
{
echo 'PHP';
}

function authorized () {

header('Location: http://www.rambler.ru/');
return false;
}
?>


т.е. header внутри функции выполняется, если других header'ов нет?
rooor
Цитата
При передаче action=out перенаправляет на Яндекс

после header пиши exit;
ячсмит
Цитата
после header пиши exit;

да, это понятно. можно и else написать, так тоже работает.
просто хочу понять, как работают header. собираются все заголовки и передается самый новый?

ну и по второму то же самое. если функция возвращается false, то работает header из нее, а не echo.
т.е. вызывается функция, запоминается header из нее, потом функция возвращает false, далее пхп смотрит, что идет echo и выдает header, а не echo. т.к. приоритет выше?

а когда ставим функцию в true, то запоминается header из функции, но т.к. далее идет еще один header, то выдается он, как новый?

где вообще можно подробно про это почитать (кроме спецификации http) ?
rooor
переходит по последнему хедеру
rooor
<?php
if($_GET['action'] == "out")
{
// 1 Если есть out - заголовок на гугл, скрипт работает дальше
header('Location: http://www.google.ru/');
}

// 2 Заходим в функцию
if (authorized())
{
// 4 Если true, заголовок яндекс, если false - рамблер из функции
header('Location: http://www.yandex.ru/');
}

else
{
echo 'PHP';
}

function authorized () {
// 3 заголовок на рамблер, скрипт работает дальше
header('Location: http://www.rambler.ru/');
return true;
}
?>
rooor
Цитата
если функция возвращается false, то работает header из нее, а не echo

заголовок послан, с сайта уже ушли когда скрипт закончил работу, поэтому echo ты уже не увидишь
ячсмит
rooor, спасибо
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.