php初学者日记(8)

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。

下一次我们将介绍常量。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注