PHP中header的作用

本文详细介绍了PHP中header()函数的功能及应用场景,包括页面跳转、指定内容类型及附件下载等操作。并提供了实际代码示例。
PHP 中 header()函数的作用是给客户端发送头信息。

什么是头信息?
这里只作简单解释,详细的自己看http协议。
在HTTP协议中,服务器端的回答(response)内容包括两部分:头信息(header) 和 体内容,这里的头信息不是HTML中的<head></head>部分,同样,体内容也不是<BODY>< /BODY>。头信息是用户看不见的,里面包含了很多项,包括:服务器信息、日期、内容的长度等。而体内容就是整个HTML,也就是你所能看见的全 部东西。

头信息有什么用呢?
头信息的作用很多,最主要的有下面几个:

1、跳转:当浏览器接受到头信息中的 Location: xxxx 后,就会自动跳转到 xxxx 指向的URL地址,这点有点类似用 js 写跳转。但是这个跳转只有浏览器知道,不管体内容里有没有东西,用户都看不到。

2、指定网页的内容:同样一个XML文件,如果头信息中指定:Content-type: application/xml 的话,浏览器会将其按照XML文件格式解析。但是,如果头信息中是:Content-type: text/xml 的话,浏览器就会将其看作存文本解析。(浏览器不是按照扩展名解析文件的)

3、附件:不知道大家有没有注意,有些时候在一些网站下载东西,点下载连接以后,结果浏览器将这个附件当成网页打开 了,里面显示的都是乱码,这个问题也和头信息有关。有时候浏览器根据Content-type 来判断是打开还是保存,这样有时就会判断错误(主要是网站设计者忘记写Content-type)。其实,还有一个可以来指定该内容为附件、需要保存,这 个就是:Content-Disposition: attachment; filename="xxxxx"

在PHP中如何写?
1、跳转
header("Location: http://www.example.com/");

2、指定内容:
header('Content-type: application/pdf');

3、附件:
// 指定内容为附件
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// 打开文件,并输出
readfile('original.pdf');


最后要提醒大家注意一点,所有头信息都必须在体内容之前,如果一旦有任何输出了的话,header函数写的 头信息就没用了。比如,在文件最开头的<?php 处,如果前面有空格或者有空行,那header函数就没用了(其实可以通过设置:output_buffer来解决,anyway),为什么这样,可以看 看HTTP协议,很简单
### PHP 中 `header()` 函数的详细用法与功能说明 `header()` 函数在 PHP 中用于向客户端发送原始 HTTP 头信息。它必须在任何实际输出之前调用,包括 HTML 标签、空行或空格等[^2]。 #### 1. 基本语法 函数的基本语法如下: ```php void header ( string $string [, bool $replace = true [, int $http_response_code ]] ) ``` - `$string`: 要发送的头信息字符串。 - `$replace`: 可选参数,默认为 `true`,表示替换掉同名的头信息;如果设置为 `false`,则会添加一个新的头信息。 - `$http_response_code`: 可选参数,用于强制设置 HTTP 响应状态码。 #### 2. 常见用法 ##### (1) 重定向页面 通过 `header()` 函数可以实现页面的重定向,例如 301 永久重定向或 302 临时重定向。 ```php header("Location: https://www.example.com", true, 301); // 301永久重定向 ``` 此代码将用户重定向到指定 URL,并设置 HTTP 状态码为 301。 ##### (2) 设置内容类型 可以使用 `header()` 函数来指定返回内容的 MIME 类型。 ```php header("Content-Type: application/json"); // 返回 JSON 数据 header("Content-Type: text/html; charset=UTF-8"); // 返回 HTML 页面并指定字符集 ``` ##### (3) 强制下载文件 通过设置 `Content-Disposition` 头信息,可以让浏览器提示用户下载文件而不是直接打开。 ```php header('Content-Type: application/zip'); // 设置 MIME 类型为 zip 文件 header('Content-Disposition: attachment; filename="example.zip"'); // 强制下载文件名为 example.zip ``` 如果将 `attachment` 替换为 `inline`,则表示在线打开文件[^4]。 ##### (4) 自定义 HTTP 状态码 可以通过 `header()` 函数自定义 HTTP 响应状态码。 ```php header("HTTP/1.1 404 Not Found"); // 返回 404 错误 header("HTTP/1.1 500 Internal Server Error"); // 返回 500 错误 ``` ##### (5) 缓存控制 可以使用 `header()` 函数来控制浏览器缓存行为。 ```php header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); // 禁止缓存 header("Pragma: no-cache"); // 兼容旧版浏览器 ``` #### 3. 注意事项 - 必须确保在调用 `header()` 函数之前没有任何输出,否则会导致报错:`headers already sent`。 - 如果需要跨多个文件使用 `header()`,请确保所有文件都没有多余的空格或换行符。 #### 4. 示例代码 以下是一个完整的示例,展示如何使用 `header()` 实现页面重定向和强制下载文件的功能: ```php <?php // 页面重定向 header("Location: https://www.example.com", true, 302); // 强制下载文件 header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="example.txt"'); header('Content-Length: ' . filesize('example.txt')); readfile('example.txt'); ?> ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值