PHP中的header函数-发送HTTP头信息到客户端。
PHP中的header函数是用来发送HTTP头信息到客户端的。HTTP头信息是客户端和服务器之间传输数据的必须内容,是在请求和响应之间交换的一组元数据。HTTP头包含了很多的信息,例如:请求方法、响应状态码、内容类型、缓存控制、cookie 等。header 函数可以在处理 HTTP 响应时方便地加入头部信息,从而控制响应数据的输出。
header 函数使用的语法为:
header(string $header, bool $replace = true, int $http_response_code = null)
其中,参数$header是必须的,表示要发送的HTTP头信息,它是一个字符串类型的参数,例如:Content-Type: text/html; charset=utf-8。参数$replace是可选的,默认为true,表示是否替换头信息,如果为true,则会覆盖已经设置的相同类型的头信息,否则,新设置的头信息会被添加到已有的头信息之后。参数$http_response_code也是可选的,表示响应状态码,例如:200表示成功,404表示未找到页面等。
header函数在 PHP 中有多种应用场景:
1. 设置文件下载
当要让用户下载某个文件时,需要设置 Content-disposition 头。这个头告诉浏览器需要下载文件,并且指定文件的名字。
例如:
$file = "/path/to/file.jpg";
header("Content-Type: image/jpeg");
header("Content-Disposition: attachment; filename=\"" . basename($file) . "\";");
header("Content-Length: " . filesize($file));
readfile($file);
上面的代码将从服务器上读取图片文件并作为字节流输出,浏览器在接收到这些数据流后,弹出一个下载窗口,让用户选择下载文件或者直接打开。
2. 设置跨域
解决跨域问题可以使用 CORS,也可以使用 PHP 发送 Header。
由于运行在不同域的站点的浏览器无法读取对方的 Cookie,也无法发送对方的 AJAX 请求。因此,PHP 来实现服务器端允许跨域访问的功能。
例如:
header("Access-Control-Allow-Origin: *");
这一行表示允许来自所有域名的 AJAX 请求,同时也可以只允许单个域名的 AJAX 请求,例如:
header("Access-Control-Allow-Origin: http://www.domain.com");
3. 设置内容类型
在使用 PHP 输出 JSON 或 XML 数据时,需要设置 Content-Type 头。这个头告诉浏览器需要以 JSON 或 XML 的方式解析这个数据。
例如:
$users = [
['name' => 'Tom', 'age' => 18],
['name' => 'Jack', 'age' => 20],
['name' => 'Lucy', 'age' => 22]
];
header('Content-Type: application/json');
echo json_encode($users);
上述代码中,设置 Content-Type 为 application/json,浏览器就会解析这个数据为 JSON 格式的数据。
4. 设置缓存
在实现缓存的时候,可以用 header 函数来设置缓存的相关信息。
例如:
$date = gmdate('D, d M Y H:i:s', time()) . 'GMT';
$expire = $date + 1800; // 缓存30分钟
header('Cache-Control: public, max-age=' . 1800);
header('Expires: ' . gmdate('D, d M Y H:i:s', $expire) . ' GMT');
上述代码中,设置了 Cache-Control 和 Expires,其中 Cache-Control 的 max-age 参数指定了缓存时间为 1800 秒,Expires 表示消息过期的时间,两者都能缓存 HTTP 响应,减少了服务器的压力。
5. 设置重定向
在网站开发中,要经常使用重定向功能,让用户访问一个链接后自动跳转到另一个链接。
例如:
header('Location: http://www.domain.com/index.html');
上述代码表示重定向到 http://www.domain.com/index.html 页面。
总之,header 函数是一个非常重要的函数,用于控制 HTTP 响应的输出,我们可以通过 header 函数来实现文件下载、跨域、设置缓存、设置内容类型、设置重定向等等。熟练使用该函数,有利于我们更好地掌控客户端与服务器之间的交互。
