6.6 WEB服务器端其他数据采集方法
PHP还提供了其他预定义变量“采集”浏览器端主机信息(如浏览器端主机的IP地址、主机名等信息)。
6.6.1 预定义变量$_REQUEST
使用预定义变量$_REQUEST既可以采集GET方式提交的URL查询字符串中的参数信息,也可以采集FORM表单POST方式提交的参数信息。以前程序中所有使用$_GET或$_POST采集的参数信息都可以替换成使用$_REQUEST采集。即$_REQUEST = array_merge ( $_GET , $_POST )。
需要注意的是,使用GET和POST混合方式提交数据时,若一个参数名既存在于GET请求中又存在于POST请求中,使用$_REQUEST采集该参数名对应的参数值时,将造成数据的丢失。例如request.php程序如下。
<form action="request.php?action=insert" method="post">
<input type="submit" name="action" value="添加">
</form>
<?php
if(isset($_GET['action'])){
echo $_GET['action'];
echo "<br/>";
}
if(isset($_POST['action'])){
echo $_POST['action'];
echo "<br/>";
}
if(isset($_REQUEST['action'])){
echo $_REQUEST['action'];
echo "<br/>";
}
?>
request.php程序的运行结果如图6-11所示,单击“添加”按钮后,request.php程序的运行结果如图6-12所示。程序request.php使用预定义变量$_REQUEST采集名称为“action”的请求参数时,实际上只采集了到了POST提交的参数,忽略了GET提交的参数。
使用GET和POST混合方式提交数据时,预定义变量$_REQUEST究竟是采集了POST提交的参数,还是GET提交的参数,与php.ini配置文件中的配置有直接关系。在php.ini文件中有这样的配置:request_order = "GP",这里的“GP”用于设定预定义变量GET和POST的解析顺序。如果把request_order = "GP"修改为request_order = "PG",WEB服务器重启后,单击request.php程序产生的“添加”按钮,将产生另外的结果。请读者自己分析产生该结果的原因。
6.6.2 预定义变量$_SERVER
使用预定义变量$_SERVER可以得到浏览器端和服务器端主机的一些相关信息,举例如下。
$_SERVER["REMOTE_ADDR"]:定义了浏览器端主机的IP地址。
$_SERVER["SERVER_ADDR"]:定义了服务器主机的IP地址。
$_SERVER["PHP_SELF"]:定义了当前执行程序的文件名。
$_SERVER['QUERY_STRING']:定义了URL的查询字符串。
$_SERVER['DOCUMENT_ROOT']:定义了WEB服务器主目录。
$_SERVER["REQUEST_URI"]:定义了除域名外的其余URL部分。
例如程序server.php如下。
<?php
$clientIP = $_SERVER['REMOTE_ADDR'];
$serverIP = $_SERVER['SERVER_ADDR'];
$phpSelf = $_SERVER['PHP_SELF'];
$queryString = $_SERVER['QUERY_STRING'];
$documentRoot = $_SERVER['DOCUMENT_ROOT'];
$requestURI = $_SERVER["REQUEST_URI"];
echo $clientIP;
echo "<br/>";
echo $serverIP;
echo "<br/>";
echo $phpSelf;
echo "<br/>";
echo $queryString;
echo "<br/>";
echo $documentRoot;
echo "<br/>";
echo $requestURI;
?>
在浏览器地址栏中输入“http://localhost/6/server.php? current_page=2”时,server.php程序的运行结果如图6-13所示。