【发布时间】:2012-11-20 17:36:50
【问题描述】:
我正在尝试使用
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() 函数的“测试”,因此似乎甚至没有发送标头。
(不,在header函数之前没有输出)
编辑 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>
编辑:更新了代码示例。
【问题讨论】:
-
您是否 100% 确定在标题之前没有任何输出?这包括您的 PHP 文件中的任何空格,这些空格将被转换为 HTML 中的空格。
-
我确定,因为在本地机器上它可以工作,如果我之前用 echo 挑起任何输出,我也会得到“标头已发送”错误。
-
var_dump(headers_sent());查看是否有任何类型的标头被发送。
-
不同的服务器以不同的方式做出反应,我的本地主机从不抱怨标题之前的输出。然而,这似乎是一个不同的问题。
标签: php http-headers http-post http-redirect