PHP中header重定向前的输出的检查及调试

本文介绍了一种在PHP中确保页面能够成功进行HTTP重定向的方法,并提供了一个实用的脚本,用于检测并定位因提前输出内容而导致重定向失败的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   通常我们会用header("Location:$url")的形式重定向文件,但有时因为一些原因导致在header前有了输出而使页面无法重定向,下面一个简单的程序就可以帮你快速定位到具体文件的具体行的内容输出。
 
if (!headers_sent($filename, $linenum)) 
{
        @
header("Location:$url");  //$url为要重定向的地址
        exit;

else 
{
        
//前面有输出,检查输出结果
        $t =  "Headers already sent in $filename on line $linenum ";
         
error_log($t,3,"/tmp/debug.txt");    //当然也可以直接echo $t;
         exit;
}
 
<?php // login_process.php session_start(); // 开启错误报告 error_reporting(E_ALL); ini_set('display_errors', 1); // 连接数据库 $conn =mysqli_connect('localhost','root','131415','san'); if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 获取用户输入 $user_type = $_POST['user_type']; $id = $_POST['id']; $input_pass =$_POST['password']; // 注意:md5 不安全,建议使用 password_hash() // 根据用户类型构建 SQL 查询 if ($user_type == 'student') { $sql = "SELECT * FROM student WHERE id = ? AND password = ?"; } else { $sql = "SELECT * FROM teacher WHERE id = ? AND password = ?"; } // 使用预处理语句防止 SQL 注入 $stmt = $conn->prepare($sql); if (!$stmt) { die("预处理失败: " . $conn->error); } // 绑定参数 $stmt->bind_param("ss", $id, $input_pass); // 执行查询 if (!$stmt->execute()) { die("查询执行失败: " . $stmt->error); } // 获取结果 $result = $stmt->get_result(); // 检查是否有匹配的用户 if ($result->num_rows > 0) { $user = $result->fetch_assoc(); $_SESSION['user_id'] = $id; $_SESSION['user_type'] = $user_type; $_SESSION['name'] = $user[$user_type == 'student' ? 's_name' : 't_name']; // 根据用户类型跳转 if ($user_type == 'teacher') { $_SESSION['is_admin'] = $user['is_admin']; header("Location: " . ($user['is_admin'] ? 'admin.php' : 'teacher.php')); } else { header("Location: student.php"); } exit(); // 确保跳转后脚本终止 } else { echo "登录失败! 用户名或密码错误。 <a href='login.php'>重试</a>"; } // 关闭连接 $stmt->close(); $conn->close(); ?>提示第12行和43行错误
03-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值