如何使用PHP的header函数进行重定向和文件下载
一、header函数的基本用法
header函数可以向客户端发送HTTP响应头
语法:header(string $string, bool $replace = true, int $http_response_code = null)
其中参数说明为:
$string: 必选,要发送的HTTP头信息。注意这里要完整的头信息,包括HTTP/1.1等信息。
$replace: 可选,如果存在相同的HTTP头信息,是否进行替换。默认是true,即替换。
$http_response_code: 可选,HTTP状态码。默认是200,表示请求成功。常见的状态码还有301,302,404等等。
二、进行重定向
重定向是指客户端请求某个URL时,服务器告知客户端把请求的URL改为另一个URL重新请求。重定向有两种方式,一种是302临时重定向,一种是301永久重定向。 通常情况下,我们采用302临时重定向。
使用header函数进行重定向的步骤如下:
1. 构造header函数中的参数。
这里只需要构造第1个参数即可,格式为:"Location: [url]",其中[url]表示重定向的URL地址。
例如,要将用户请求的www.example.com/old.php重定向到www.example.com/new.php,则参数应该为:"Location: http://www.example.com/new.php"。
2.使用header函数发送HTTP响应头。
此时需要注意两点:
(1)header函数必须在任何实际的输出之前被调用,否则会报错。
(2)使用header函数时需要将所有的输出缓冲区输出并关闭缓冲区,然后再发送header信息。
下面是示例代码:
<?php
header("Location: http://www.example.com/new.php");
ob_end_flush(); //将所有输出缓冲区输出并关闭缓冲区
exit; //退出脚本以避免继续输出
?>
三、进行文件下载
使用header函数进行文件下载的步骤如下:
1.设置HTTP响应头的Content-Type和Content-Disposition字段。
Content-Type表示响应的文件类型,可以通过文件后缀名判断。
Content-Disposition表示文件下载时的行为,需要设置为attachment,表示下载文件而不是在浏览器内打开。
下面是示例代码:
<?php
header('Content-Type: application/octet-stream'); //设置下载文件类型为二进制流
header('Content-Disposition: attachment; filename="test.txt"'); //设置为文件下载并指定文件名
readfile('test.txt'); //输出文件内容
exit;
?>
2.将文件内容输出到客户端。
可以使用readfile函数读取文件,并使用echo函数输出即可。
3.关闭输出缓冲区,退出脚本。
如上文所述,使用header函数时需要将所有的输出缓冲区输出并关闭缓冲区,并退出脚本以避免继续输出。
