PHP - 函数内的标题(“Location:”)重定向而不调用函数

时间:2010-01-22 00:19:21

标签: php redirect header

我正在使用名为headerLocation()的函数才能正确重定向。 这是该功能的相关部分,我正在使用它来重定向,然后显示适当的消息(个人偏好)。

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

问题是,当我运行脚本时,header("Location: ". $location);部分被激活,甚至没有调用该函数(当我最初需要它进行php解析时)。 这使得该功能无用。

有什么方法吗?

5 个答案:

答案 0 :(得分:10)

除了已经给出的反馈。重定向后exit是个好主意。

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

答案 1 :(得分:3)

这不应该发生。您 在某处调用该函数,或者代码的另一部分正在写出标题。你能为这个函数添加一些调试来检查吗?

答案 2 :(得分:1)

重定向发生得太快,无法正确写入$ _Session。使用

session_write_close();
在标题调用之前

编辑:在函数调用前删除了荒谬的$。

答案 3 :(得分:1)

只是一个猜测,也许你应该缓冲你的输出(ob_start()) 这将导致仅在刷新输出时发送标头,允许其余代码执行。

答案 4 :(得分:1)

header()函数在没有先调用headerLocation()的情况下重定向是没有意义的。

我的猜测是你没有看到$_SESSION['output']抓住$message,这让你觉得这个功能没有被执行。尝试写一个新文件,这有用吗?我打赌它会。

$_SESSION可能没有保留您的值的原因可能是因为P3P以及您的浏览器和/或PHP配置。

<强> Also, are you sure you don't wanna call die() / exit() after the header() redirect?