header() 的作用是给客户端发送 HTTP 头信息。

HTTP 响应通常可以理解为两部分:响应头和响应体。响应头里会包含状态码、内容类型、缓存策略、内容长度等信息;响应体才是浏览器最终展示的 HTML、图片、JSON 或文件内容。

跳转

2 秒后跳转:

1
2
header('Refresh: 2; URL=http://localhost/session.php');
exit;

立即跳转:

1
2
header('Location: http://localhost/session.php');
exit;

使用 Location 跳转后建议立即 exit,避免后续 PHP 代码继续执行。

指定内容类型

同一个文件,如果响应头中指定不同的 Content-Type,浏览器会按不同方式处理。

例如 XML:

1
header('Content-Type: application/xml; charset=utf-8');

普通文本:

1
header('Content-Type: text/plain; charset=utf-8');

JSON:

1
2
3
4
5
6
header('Content-Type: application/json; charset=utf-8');
echo json_encode([
'code' => 0,
'msg' => 'ok',
], JSON_UNESCAPED_UNICODE);
exit;

文件下载

示例:

1
2
3
4
5
6
7
8
$filename = 'tupian.jpg';

header('Content-Type: application/x-jpg');
header('Content-Disposition: attachment; filename="保存时的文件名.jpg"');
header('Content-Length: ' . filesize($filename));

readfile($filename);
exit;

注意:

  • Content-Disposition: attachment 表示让浏览器下载文件。
  • filename 是保存时显示的文件名。
  • 下载前不能提前输出 HTML、空格或 BOM。
  • 文件路径可以是绝对路径,也可以是相对路径,但要确保 PHP 进程有读取权限。

跳转到文件

示例:

1
2
3
4
5
6
7
$link = 'tupian.jpg';

if ($link !== '') {
header('HTTP/1.1 303 See Other');
header('Location: ' . $link);
exit;
}

如果 $link 来自用户输入,一定要做白名单或路径校验,避免开放重定向或任意文件访问问题。


本文早期发布于个人 CSDN 博客:查看原文

站内搜索

没有找到内容!