php的超级全局变量
php中提供了很多有用的预定义变量,可以在执行脚本的任何位置访问,用于提供大量与环境有关的信息。可以通过这些变量获得关于当前用户会话、用户操作环境和本地操作环境等详细信息。php会创建部分变量,而其他许多变量的可用性和值取决于操作系统和Web服务器。因此,下面的代码并没有试图收集所有预定义变量及其值的完整列表,而只是输出了与给定Web服务器和脚本执行环境有关的所有预定义变量:
foreach($_SERVER as $var => $value) { echo "$var => $value <br />"; }
结果如图
可以看到,在此可以得到很多东西,有些信息很有用,有些则不太有用,可以将其中一个变量当作常规的变量进行显示。例如,显示用户的IP地址:
printf("你的ip地址是:%s",$_SERVER['REMOTE_ADDR']);
这时会获得你的ip地址,例如:180.174.152.144
还可以获得客户的用户代理:
printf("你的浏览器的用户代理为: %s,$_SERVER['HTTP_USER_AGENT']")
返回了如下信息:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30
php有9个预定义的变量数组,这个例子只展示了一个,接下来继续详细介绍这些内容:
1.$_SERVER 关于服务器和客户的内容,常用的内容包括:
- $_SERVER[‘HTTP_REFERER’]:引导用户到达当前位置页面的URL。
- $_SERVER[‘REMOTE_ADDR’]:客户的IP地址。
- $_SERVER[‘REQUEST_URI’]:URL的路径部分,例如,如果URL是http://www.example.com/example/index.html,那么URI就是/example/index.html
- $_SERVER[‘HTTP_USER_AGENT’]:客户的用户代理,一般会提供操作系统和浏览器的有关信息。
2.用GET方法获获取传递的变量
$_GET超级全局变量包含使用GET方法传递的参数的有关信息。如果请求URL http://www.example.com/example/default.html?category=a&id=134,就可以使用$_GET超级全局变量访问如下变量:
$_GET[‘category’] = “a”
$_GET[‘id’] = “134”
默认情况下,要访问通过GET方法传递的变量,$_GET超级全局变量是唯一的途径。不能使用$category,$id等方式来引用GET变量。在之后的内容中也会涉及到。
3.用POST方法获取传递的变量
$_POST超级全局变量包含用POST方法传递的参数的有关信息。考虑如下用于请求用户信息的表单:
<form action ="subscribe.php" method ="post"> <p> Email地址:<br /> <input type="text" name="email" size="20" maxlength="50" value="" /> </p> <p> 密码:<br /> <input type="text" name="pswd" size="20" maxlength="15" value="" /> </p> <p> <input type="submit" name="subscribe" value="提交" /> </p> </form>
相应的php文件为:
<?php foreach($_POST as $var => $value) { echo "$var => $value <br />"; } ?>
可以发现
得到的结果为:
email => user@example.com
pswd => 123456
subscribe => 提交
即可以使用下面的变量:
$_POST['email'] ="user@example.com"; $_POST['pswd'] ="123456"; $_POST['subscribe'] ="提交";
与$_GET一样,在默认的情况下,$_POST超级全局变量是范文POST变量的唯一方式。注意不能使用$email、$pswd、$subscribe等方式引用POST变量。
4.获取存储在cookie中的信息
$_COOKIE超级全局变量储存了通过 HTTP cookie传递到脚本的信息。关于这一部分的内容,我们将在未来说明。
5.用POST方法获取关于上传文件的信息
$_FILES超级全局变量包含通过POST方法向服务器上传的数据有关信息。这超级全局变量与其他的变量略有不同,它是一个二维数组,包含5个元素。第一个下标表示表单的文件上传元素名,第二个下标是五个预定义下标之一,表示某些属性。
- $_FILES[‘upload-name’][‘name’]:从客户端向服务器上传文件的文件名。
- $_FILES[‘upload-name’][‘type’]:上传文件的MIME类型。这个变量是否赋值取决于浏览器的功能。
- $_FILES[‘upload-name’][‘size’]:上传文件的大小(以字节为单位)。
- $_FILES[‘upload-name’][‘tmp_name’]:上传之后,将此文件转移到最终位置之前赋予的临时名。
- $_FILES[‘upload-name’][‘error’]:上传状态码。这个代码在上传后都会填写,有5个可能的值,如下:
UPLOAD_ERR_OK :文件成功上传。
UPLOAD_ERR_INI_SIZE :文件大小超出了upload_max_filesize指定所制定的最大值。
UPLOAD_ERR_FORM_SIZE :文件大小超出了MAX_FILE_SIZE隐藏表单域参数(可选)指定的最大值。
UPLOAD_ERR_PARTIAL :文件只上传了一部分。
UPLOAD_ERR_NO_FILE :上传表单中没有指定文件。
6.更多操作系统环境的内容
- $_ENV[‘HOSTNAME’] :服务器主机名。
- $_ENV[‘SHELL’] :系统shell。
注意: php还支持了另外练歌超级全局变量,分别是$GLOBALS和$_REQUEST。$_REQUEST超级全局变量可以记录通过GET、POST和cookie等方法传递给脚本的变量。这些变量的顺序不依赖于他们在发送脚本中出现的顺序,而是依赖于variables_order配置指令所指定的顺序。$GLOBALS超级全局变量数组可以认为是超级全局变量的集合,包含全局作用域内所有变量。不过使用方法仍然需要注意,因为有可能不安全。
7.获取存储在会话里的信息
$_SESSION超级全局变量所包含与所有绘画有关系的信息,注册会话信息能够为你提供方便,这样就可以在整个网站使用这些会话信息,而无需通过GET或是POST显示的传递数据。这些内容我们也将在下面的内容中介绍。
接下来,我们介绍
变量的变量
有时候,你可能希望使用这样一个变量,它的内容本身可以动态的视为变量,考虑一个典型的变量赋值:
$recipe = "tortellini";
我们可以在原来的变量名前面再加上一个“$”符号,就会让tortellini作为一个变量,可以再为它赋予一个值:
$$recipe = "& spaghetti";
其作用是把& spaghetti赋值给名为tortellini的变量。
下面两行代码都将得到相同的结果:
echo $recipe $tortellini; echo $recipe ${$recipe};
两个结果都是字符串 tortellini & spaghetti。
下一次我们将介绍常量。