Как объявить больше чем один заголовок на PHP

Я хочу отправить своих пользователей в различные страницы на основе пользовательского действия. Таким образом, я сделал несколько функций в верхней части страницы как так:

<?php

function one() {
     header("location: pagea.php");
}
function two() {
     header("location: pageb.php");
}
function three() {
     header("location: pagec.php");
}

?>

Конечно, я получаю ошибку, потому что я - заголовки объявления ре. Сначала я, хотя это было хорошо, так как я содержу их в функциях и вызываю любую функцию за один раз. Но тем не менее я получаю ошибку. Есть ли какой-либо другой способ сделать это?

11
задан Homer Simpson 11 March 2010 в 19:07
поделиться

6 ответов

Я думаю, вы неправильно понимаете, что делает HTTP-заголовок Местоположение .

Заголовок Location инструктирует клиента перейти на другую страницу. Вы не можете отправить больше одного заголовка Location на страницу.

Кроме того, PHP отправляет заголовки прямо перед первым выводом. После вывода вы не можете указать больше заголовков (если вы не используете буферизацию вывода).

Если вы укажете один и тот же заголовок дважды, по умолчанию header () заменит предыдущее значение последним ... Например:

<?php
header('Location: a.php');
header('Location: b.php');
header('Location: c.php');

перенаправит пользователя на c .php , ни разу не проходя через a.php или b.php .Вы можете изменить это поведение, передав значение false второму параметру (называемому $ replace ):

<?php
header('X-Powered-By: MyFrameWork', false);
header('X-Powered-By: MyFrameWork Plugin', false);

Заголовок Location можно указать только один раз. Отправка нескольких заголовков Location не будет перенаправлять пользователей на страницы ... Это, вероятно, запутает хрень из UA. Также имейте в виду, что код продолжает выполняться после отправки заголовка Location . Поэтому следуйте за этим вызовом header () с exit . Вот правильная функция перенаправления:

function redirect($page) {
    header('Location: ' . $page);
    exit;
}
15
ответ дан 3 December 2019 в 05:12
поделиться

Вы получаете эту ошибку, потому что ваш сценарий уже произвел вывод (вы использовали echo / print перед вызовом header ()). Вам нужно вызвать header () до того, как ваш скрипт выдаст какой-либо вывод.

Из Руководства по PHP

http://php.net/manual/en/function.header.php

Помните, что header () должен вызываться перед отправкой любого фактического вывода , либо обычные HTML-теги, пустые строки в файле или из PHP. Очень распространенная ошибка - читать код с помощью include () или require (), функций или другой функции доступа к файлам, а также иметь пробелы или пустые строки, которые выводятся до вызова header (). Та же проблема существует при использовании одного файла PHP / HTML.

Вы получите следующую ошибку при попытке вызвать header () после отправки любого вывода ...

Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены

1
ответ дан 3 December 2019 в 05:12
поделиться

Попробуйте что-то вроде этого:

<?php

$page = // use an if statement or whatever you need to figure out 
        //which page you need (pagea.php, etc.)

fnx($page)

function fnx($page) {
    header("location: " . $page);
}

?>

или

<?php

$page = // use an if statement or whatever you need to figure out 
        //which page you need (pagea.php, etc.)

header("location: " . $page);

?>
3
ответ дан 3 December 2019 в 05:12
поделиться

Вот как я делаю, когда мне нужно отправить несколько заголовков:

$headers = array(
   'Location' => 'http://www.stackoverflow.com',
   'Content-Type' => ' application/pdf',
);

foreach ($headers as $headerType => $headerValue)
{
   header($headerType . ': ' . $headerValue);
}

Используйте headers_sent(), чтобы проверить, сможете ли вы отправить заголовки или нет.

1
ответ дан 3 December 2019 в 05:12
поделиться

Либо они не все в функциях, либо вызывается более одного.

2
ответ дан 3 December 2019 в 05:12
поделиться
function one() {
     return "location: pagea.php";
}
function two() {
     return "location: pageb.php";
}
function three() {
     return "location: pagec.php";
}

header(one()); // for example

Может быть, что-то в этом роде?

0
ответ дан 3 December 2019 в 05:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: