本文目录导读:

这是一个很好的问题!简短的回答是:重定向后代码仍然会继续执行,除非你显式地停止执行。
详细说明
当你使用 header() 函数进行重定向时,PHP 只是发送了一个 HTTP 响应头给浏览器,但脚本会继续运行直到结束。
示例
<?php
header('Location: https://example.com');
echo "这行代码会执行!";
// 后续代码继续执行...
$data = process_data(); // 这也会执行
file_put_contents('log.txt', '记录'); // 这也会执行
?>
正确的做法
为了防止不必要的代码执行,你应该在重定向后立即停止脚本:
<?php
header('Location: https://example.com');
exit; // 或 die()
// 下面的代码不会执行
echo "这行不会输出";
?>
为什么这很重要?
- 性能问题:重定向后的代码可能执行耗时的操作,浪费服务器资源
- 安全隐患:可能执行不应该执行的敏感操作
- 逻辑错误:可能意外修改数据库或文件
最佳实践
<?php
// 推荐方式1
header('Location: https://example.com');
exit;
// 推荐方式2
exit(header('Location: https://example.com'));
// 推荐方式3(PHP 5.4+)
http_response_code(302);
header('Location: https://example.com');
exit;
?>
特殊情况
exitvsdie:两者功能相同,die是exit的语言结构别名- 输出缓冲:如果你使用了
ob_start(),即使有输出,header()仍然可以正常工作 - 异步操作:重定向后代码可能在服务器端继续执行到脚本结束
永远在重定向后加上 exit; 或 die;,这是 PHP 开发中的重要安全实践!