9.2 HTTP应用
在第1.4节曾简要地阐述过HTTP协议,对该节内容的理解将有助于读者学习本节的知识。本节主要和HTTP处理有关的函数header()和函数setcookie()。
9.2.1 生成一个HTTP头
图9-4 HTTP通信过程
服务器在将HTML文档传送至客户端之前,会先发送一些数据的说明信息到浏览器,最后发送HTML文档数据,这些说明信息称作头标。图9-4说明了浏览器和服务器之间通信的过程以及服务器传送给服务器头标的时间。
函数header()会将HTML文档的标头以HTTP协议发送至浏览器,告诉浏览器该如何处理这个页面。如果忘记了标头的概念,或者不清楚有哪些内容会被传送,请读者再熟悉一下第1章有关HTTP协议的介绍。该函数的语法如下。
header (string $str_header );
函数的参数$str_header是一个字符串,用来接受要发送的标头。事实上,这个函数还有两个可选参数,因为对初学者来说没有必要了解,这里不再赘述。
下面介绍函数header()的几个使用范例。在PHP中,函数header()最常见的用法就是重定向。代码9-4实现了将用户的访问重定向到PHP的官方网站。
代码9-4 使用函数header()重定向9-4.php
01 <?php 02 header("location: http://www.php.net"); // 重定向页面 03 exit; 04 ?>
【代码解析】经过第02行的重定向,会发现打开了新的页面。
如果限制某一页面不能被用户访问,可以用代码9-5所示的程序,设置页面状态为404。
代码9-5 使用函数header()设置页面状态为“404未找到文件”9-5.php
01 <?php 02 header('HTTP/1.1 404 Not Found'); // 找不到网页的提示信息 03 header("status: 404 Not Found"); 04 ?>
【代码解析】通过浏览器访问该程序,会看到“找不到网页”和“HTTP 404–未找到”的提示,如图9-5所示。
代码9-6可保证用户访问某页面时获取最新的内容,而不是读取客户端的缓存。
代码9-6 通过函数header()获取页面最新内容9-6.php
01 <?php 02 // 告诉浏览器此页面的过期时间( 用国际标准时间表示) ,只要是已经过去的日期即可 03 header("Expires: Mon, 26 Jul 1970 05:00:00 GMT"); 04 05 // 告诉浏览器此页面的最后更新日期( 用国际标准时间表示) 也就是当天,目的就是强迫浏览器获取最新内容 06 header("Last-Modified: ".gmdate("D,d M Y H:i:s")."GMT"); 07 header("Cache-Control: no-cache,must-revalidate"); // 告诉浏览器不使用缓存 08 09 // 与以前的服务器兼容, 即兼容HTTP1.0 协议 10 header("Pragma: no-cache"); 11 header("Content-type: application/file"); // 输出MIME 类型 12 header("Content-Length: 2850"); // 文件长度 13 header("Accept-Ranges: bytes"); // 接受的范围单位 14 header("Content-Disposition: attachment;filename=afilename"); // 默认时文件保存对话框中的文件名称 15 ?>
【代码解析】在PHP中,向浏览器传送HTML文档之前需要传完所有头标。也就是说,函数header()必须在有任何实际输出之前调用,包括输出普通的HTML、空行或PHP代码。如下代码就是错误的,因为在调用函数header()之前已经输出了HTML标记<html>。
<html> <?php header('Location: http://www.example.com/'); ?>
9.2.2 获取HTTP头信息
通过PHP的HTTP预定义变量$_SERVER可以获取页面的HTTP头信息。这个变量是一个关联数组,其每个索引都对应一个HTTP头信息,主要的头信息的索引值如下所述。
·HTTP_HOST:表示HTTP主机。
·SERVER_SIGNATURE:表示服务器签名。
·SERVER_NAME:表示服务器名称。
·SERVER_ADDR:表示服务器地址。
·SERVER_PORT:表示服务器端口。
·SERVER_PROTOCOL:表示服务器协议。
代码9-7演示了如何输出由$_SERVER保存的所有HTTP头信息。
代码9-7 获取由$_SERVER保存的HTTP头信息9-7.php
01 <?php 02 echo "<pre>"; 03 print_r($_SERVER); // 输出由$_SERVER 保存的头信息数组 04 ?>
【代码解析】这段程序第03行表示要将包含所有HTTP头信息的数组内容输出到浏览器,执行结果如图9-6所示。
图9-5 设置页面状态为“404未找到文件”
图9-6 输出HTTP头信息
共有条评论 网友评论