PHP-заголовок («Местоположение:») внутри функции перенаправляет без функции вызова

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

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

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

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

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

В дополнение к уже полученной обратной связи. Это хорошая идея exit после перенаправления.

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

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

Для функции header() нет смысла перенаправлять, не обращаясь headerLocation() к вызову headerLocation() .

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

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

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

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

 session_write_close(); 

перед вызовом заголовка.

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