header-location重定向在Web服务器上不起作用

时间:2012-12-03 09:12:32

标签: php http-headers http-post http-redirect

我正在尝试使用

header("Location: index.php")

在我的登录脚本中,但它不能在我的直播服务器上运行,只能在本地运行。我不知道为什么会有任何问题。

我也做了一些测试:

error_reporting(E_ALL);
ini_set('display_errors', 1);

// header('Location: test.php');

require_once 'class/functions.php';
$func = new Functions();
//$error = "";
if(isset($_POST['loginSubmitted'])) {
    $user = $func->loginUser($_POST);
    if($user == true) {
        session_start();
        $_SESSION['loggedin'] = true;
        header("Location: index.php");
        die('test');
    }
    else {
        $error = 'Login nicht erfolgreich.';
    }
}

显示了die()函数的“test”,因此看起来标题甚至都没有发送。

(不,在标题函数之前没有输出)

编辑3:

使用get代替post作品。我真的很困惑。

编辑2:

我做了一个缩小版本的测试,甚至以下都不起作用。看起来像服务器问题(与$ _POST组合?!):

<?php 
if(isset($_POST['submitted'])) {
    header('Location: index2.php');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Login</title>
</head>
<body>
    <form action="" method="post">
        <input type="text" name="name" />
        <input type="submit" name="submitted" value="senden" />
    </form>
</body>
</html>

编辑:更新了代码示例。

1 个答案:

答案 0 :(得分:0)

在尝试设置新标头之前,您可能会发送一些输出。在发送任何实际输出之前,必须先设置标题。

如果您尝试此操作,PHP将触发警告,但您的错误报告设置可能会阻止它。暂时将它们设置为最大值以查看输出的发送位置:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);


echo 'Output!';

header('X-Test: Test');

产地:

Warning: Cannot modify header information - headers already sent by (output started at /test.php:6) in /test.php on line 8