PHP 7登录成功时出现Cannot modify header信息警告的问题求助
解决PHP "Cannot modify header information" 警告问题
这个警告是PHP里非常常见的问题,核心原因很明确:header()函数必须在任何实际输出(包括HTML内容、echo输出、甚至文件开头/结尾的空格、换行)之前调用。咱们来看看你的代码哪里出了问题,以及怎么修复:
问题分析
你的代码里有两处直接导致警告的逻辑:
- 登录成功时执行
include "index.php":这会立刻输出index.php里的所有内容(错误提示里明确指出输出从index.php:25开始),之后再调用header("Refresh:2; url=login.php")时,HTTP头已经被发送了,自然无法修改。 - 登录失败时先执行
echo "<h1>Login Failure</h1>":输出内容后再调用header(),同样违反了"先发送头再输出内容"的规则。
修复方案
我们需要调整代码逻辑,确保所有header()调用都在输出之前执行,具体修改如下:
<?php session_start(); // 务必确保session已启动(如果之前没加的话) // 假设此处有你查询数据库获取$data的代码,省略 if ($password == $data['password']) { // 存储session信息 $_SESSION['user_akses'] = $data['user_akses']; $_SESSION['username'] = $data['username']; // 登录成功直接跳转至index.php,而非include header("Location: index.php"); exit; // 跳转后必须终止脚本,防止后续代码执行 } else { // 先设置刷新跳转的header,再输出提示内容 header("Refresh:2; url=login.php"); echo "<h1>Login Failure</h1>"; } ?>
关键修改点说明
- 登录成功逻辑:用
header("Location: index.php")直接跳转,替代include "index.php"。这样不会提前输出index.php的内容,确保HTTP头在输出前发送完成。跳转后一定要加exit;,避免脚本继续执行后续代码。 - 登录失败逻辑:把
header()调用移到echo之前,确保头信息先发送,之后再输出提示内容就不会触发警告了。 - 额外检查:确认
index.php的第25行没有提前输出内容(比如多余的空格、HTML标签),同时确保proseslogin.php文件开头没有任何字符(包括空格),第一行就是<?php,避免隐形输出。
内容的提问来源于stack exchange,提问作者Franksye Sipangkar
相关产品推荐
相关产品推荐

