PHP标头位置在live server上不起作用
我有一个简单的注册表设置,在发送详细信息到我的功能,把数据在数据库中,我希望页面重定向到一个成功的页面 这在我的本地服务器上运行得很好,但是当我把它上传到我的实时服务器上时,它并没有重定向 不起作用的重定向在第65行:它只是重定向到register.php?success 任何帮助都将受到感激。我见过一些人有同样的问题,但他们的解决方案对我不起作用: 所有其他收割台位置均可工作。只有这一个不会:@PHP标头位置在live server上不起作用,php,Php,我有一个简单的注册表设置,在发送详细信息到我的功能,把数据在数据库中,我希望页面重定向到一个成功的页面 这在我的本地服务器上运行得很好,但是当我把它上传到我的实时服务器上时,它并没有重定向 不起作用的重定向在第65行:它只是重定向到register.php?success 任何帮助都将受到感激。我见过一些人有同样的问题,但他们的解决方案对我不起作用: 所有其他收割台位置均可工作。只有这一个不会:@ <?php include 'core/init.php'; //c
<?php
include 'core/init.php';
//check if logged in
logged_in_redirect();
include 'includes/overall/header.php';
if (empty($_POST) === FALSE) {
$required_fields = array('username', 'password', 'password_again', 'first_name', 'last_name', 'email');
foreach ($_POST as $key => $value) {
if (empty($value) && in_array($key, $required_fields) === true) {
$errors[] = 'You appear to have missed something out, all fields are required.';
break 1;
}
}
if (empty($errors) === true) {
if (user_exists($_POST['username']) === true ) {
$errors[] = 'Sorry, the username \'' . $_POST['username'] . '\' is already taken.';
}
if (strlen($_POST['username']) < 6) {
$errors[] = 'Sorry, your username must be at least 6 characters.';
}
if (strlen($_POST['username']) > 25) {
$errors[] = 'Sorry, your username must be under 25 characters.';
}
if (preg_match("/\\s/", $_POST['username']) == true) {
$errors[] = 'Your username must not contain any spaces.';
}
if (strlen($_POST['password']) < 6) {
$errors[] = 'Sorry, your password must be at least 6 characters.';
}
if ($_POST['password'] !== $_POST['password_again']) {
$errors[] = 'Sorry, your passwords do not match.';
}
if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false ) {
$errors[] = 'Sorry, you did not provide a valid email address.';
}
if (email_exists($_POST['email']) === true ) {
$errors[] = 'Sorry, the email \'' . $_POST['email'] . '\' is already registered to an account.';
}
}
}
?>
<h1>Register</h1>
<?php
if (isset($_GET['success']) && empty($_GET['success'])) {
echo "You have been registered successfully.";
} else {
if (empty($_POST) === false && empty($errors) === true) {
// register user
$register_data = array(
'username' => $_POST['username'],
'password' => $_POST['password'],
'first_name' => $_POST['first_name'],
'last_name' => $_POST['last_name'],
'email' => $_POST['email'],
'email_code' => md5($_POST['username'] + microtime())
);
register_user($register_data);
//header location not working *********************
header('Location: register.php?success');
exit();
} else if (empty($errors) === false) {
//error output
echo output_errors($errors);
}
?>
<form action="" method="post">
Register your account here, all fields are required.
<ul>
<li>
Username: </br>
<input type="text" name="username"/>
</li>
<li>
Password: </br>
<input type="password" name="password"/>
</li>
<li>
Repeat Password: </br>
<input type="password" name="password_again"/>
</li>
<li>
First Name: </br>
<input type="text" name="first_name"/>
</li>
<li>
Last Name: </br>
<input type="text" name="last_name"/>
</li>
<li>
Email: </br>
<input type="text" name="email"/>
</li>
<li>
<input type="submit" value="Register"/>
</li>
</ul>
</form>
<?php
}
include 'includes/overall/footer.php';
?>
最有可能的是,输出缓冲区在开发环境中打开,在活动环境中关闭。此外,在实时环境中,向用户显示错误必须处于禁用状态,或者在标题显示在浏览器中之前启动确切的错误输出
检查ini文件中的这些内容:记住,在发送任何实际输出之前,必须调用头文件,无论是通过普通HTML标记、文件中的空行还是通过PHP。使用include或require函数或其他文件访问函数读取代码,并且在调用头之前输出空格或空行,这是一个非常常见的错误。使用单个PHP/HTML文件时也存在同样的问题 我在打开前看到空白。您在服务器错误日志中看到任何错误吗?显示响应标题。此代码在任何位置都无法工作。Register发送头,因此任何进一步的头调用都将失败。如果打开输出缓冲,它将工作,但如果不工作,正如Sebas指出的那样,您需要在发送任何其他输出之前发送头。谢谢!:这是我的第一个大项目,到目前为止我学到了很多:我只在需要的时候才添加标题,解决了这个问题,有点混乱,但它可以工作:D我会在上线之前把它整理好。