如何在PHP上声明多个标头

Hom*_*son 11 php header

我想根据用户操作将用户发送到不同的页面.所以我在页面顶部创建了多个函数,如下所示:

<?php

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

?>
Run Code Online (Sandbox Code Playgroud)

当然我收到错误,因为我正在重新声明标题.起初我虽然它会好起来因为我在函数中包含它们并且我一次调用任何一个函数.但我仍然得到错误.有没有其他方法这样做?

And*_*ore 15

我认为你误解了HTTP头的Location作用.

Location头指示客户端导航到另一个页面.您不能Location每页发送更多的标题.

此外,PHP在第一个输出之前发送标头.输出后,您不能再指定任何标题(除非您使用输出缓冲).

如果您指定两次相同的标头,默认情况下,header()将使用最新的标头替换以前的值...例如:

<?php
header('Location: a.php');
header('Location: b.php');
header('Location: c.php');
Run Code Online (Sandbox Code Playgroud)

将用户重定向到c.php,从未一次经过a.phpb.php.您可以通过将false值传递给第二个参数(调用$replace)来覆盖此行为:

<?php
header('X-Powered-By: MyFrameWork', false);
header('X-Powered-By: MyFrameWork Plugin', false);
Run Code Online (Sandbox Code Playgroud)

Location标头仅可指定一次.发送多个Location标题不会将用户重定向到页面...它可能会混淆UA的废话.另外,请理解代码在发送Location标头后继续执行.因此遵循调用header()同一个exit.这是一个正确的重定向功能:

function redirect($page) {
    header('Location: ' . $page);
    exit;
}
Run Code Online (Sandbox Code Playgroud)


ink*_*dmn 0

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

header(one()); // for example
Run Code Online (Sandbox Code Playgroud)

也许类似的事情?