PHP - заголовок ("Location:") внутри функции перенаправляет без вызова функции - PullRequest
3 голосов
/ 22 января 2010

Я использую функцию с именем headerLocation() для правильного перенаправления. Это важная часть функции, я использую ее для перенаправления и отображения соответствующего сообщения (личные настройки).

function headerLocation($location,$message)
{
    $_SESSION['output'] = $message;
    header("Location: ". $location);
}

Проблема в том, что, когда я запускаю скрипт, часть header("Location: ". $location); активируется, даже не вызывая функцию (когда я изначально требую ее для разбора php). Это делает функцию бесполезной.

Есть ли способ обойти это?

Ответы [ 5 ]

10 голосов
/ 22 января 2010

В дополнение к уже предоставленной обратной связи. Рекомендуется exit после переадресации.

function headerLocation($location,$message)
{
    $_SESSION['output'] = $message;
    header("Location: ". $location);
    exit;
}
3 голосов
/ 22 января 2010

Этого не должно быть. Либо вы вызываете функцию где-то, либо другая часть кода пишет заголовок. Можете ли вы добавить отладку в эту функцию для проверки?

1 голос
/ 22 января 2010

Нет смысла перенаправлять функцию header() без предварительного вызова headerLocation().

Я предполагаю, что вы не видите $_SESSION['output'] hold $message, и это заставляет вас думать, что функция не выполняется. Попробуйте вместо этого записать в новый файл, это работает? Бьюсь об заклад, это будет.

Причина, по которой $_SESSION может не содержать ваши значения, возможно, из-за P3P и вашего браузера и / или конфигурации PHP.

Кроме того, вы уверены, что не хотите звонить die() / exit() после перенаправления header()?

1 голос
/ 22 января 2010

Просто предположение, возможно, вам следует буферизовать ваш вывод (ob_start ()). Это приведет к тому, что заголовки будут отправляться только после сброса вывода, что позволит выполнить остальной код.

1 голос
/ 22 января 2010

Перенаправление происходит слишком быстро для правильной записи $ _Session. Используйте

session_write_close();

до вызова заголовка.

Редактировать: Удалены нелепые $ перед вызовом функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...