对于全部脚本而言,PHP提供了大量的预定义变量。这些变量将所有的外部变量表示成内建环境变量,并且将错误信息表示成返回头。这些变量大多以数组的形式被定义。
$_SERVER是一个包含了诸如头信息(header)、路径(path)及脚本位置(script locations)信息的数组。这个数组中的项目由Web服务器创建。不能保证每个服务器都提供全部项目,服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。$_SERVER数组部分元素如表6-1所示。
表6-1 $_SERVER数组
在浏览器打印出$_SERVER数组的代码如下:
<?php echo "<pre>"; print_r($_SERVER); ?>
浏览器的输出结果如下:
Array ( [HTTP_HOST] => localhost [HTTP_CONNECTION] => keep-alive [HTTP_CACHE_CONTROL] => max-age=0 [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9, image/webp,*/*;q=0.8 [HTTP_UPGRADE_INSECURE_REQUESTS] => 1 [HTTP_USER_AGENT] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 [HTTP_ACCEPT_ENCODING] => gzip, deflate, sdch [HTTP_ACCEPT_LANGUAGE] => zh-CN,zh;q=0.8 [HTTP_COOKIE] => PHPSESSID=e1bbc84e23bf85691e7c5a4ab07ee0de; pgv_pvi=4369311744; pgv_si=s1775918080; CNZZDATA155540=cnzz_eid%3D1811041545- 1463297631-%26ntime%3D1463303031 [PATH] => /usr/bin:/bin:/usr/sbin:/sbin [SERVER_SIGNATURE] => [SERVER_SOFTWARE] => Apache/2.4.16 (Unix) PHP/7.0.5 [SERVER_NAME] => localhost [SERVER_ADDR] => ::1 [SERVER_PORT] => 80 [REMOTE_ADDR] => ::1 [DOCUMENT_ROOT] => /Library/WebServer/Documents [REQUEST_SCHEME] => http [CONTEXT_PREFIX] => [CONTEXT_DOCUMENT_ROOT] => /Library/WebServer/Documents [SERVER_ADMIN] => you@example.com [SCRIPT_FILENAME] => /Library/WebServer/Documents/book/str.php [REMOTE_PORT] => 59377 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /book/str.php [SCRIPT_NAME] => /book/str.php [PHP_SELF] => /book/str.php [REQUEST_TIME_FLOAT] => 1463828978.149 [REQUEST_TIME] => 1463828978 [argv] => Array ( ) [argc] => 0 )
页面之间传递信息可通过GET和POST两种方式完成。$_GET和$_POST可分别用来接收这两种方式传递过来的数据。使用GET方法在页面间传递数据时,所传递的数据内容会显示在浏览器地址栏,而POST方式则不会。
创建一个index.html文件,文件的代码如下:
<html> <head></head> <body></body> <form action="get.php" method="get"> name:<input type='text' name='name'> phone:<input type='text' name='phone'> <input type='submit' value='submit'> </form> </html>
然后创建get.php文件,代码如下:
<?php echo "get method:<br/>"; echo "name is " . $_GET['name'] . ",phone is " . $_GET['phone']; ?>
在index.html页面填写name和phone,单击submit按钮,数据将会被传递到get.php,在浏览器地址栏也会出现所填写的数据,如图6-1所示。
图6-1 GET方法接收数据
更改index.html的文件代码action="post.php"method="get",使用POST的方式传值给post.php。post.php的代码如下:
<?php echo "post method:<br/>"; echo "name is " . $_POST['name'] . ",phone is " . $_POST['phone']; ?>
POST方式传递的数据没有出现在浏览器中,结果如图6-2所示。
图6-2 POST方法接收数据
$_FILES数组用于获取通过POST方法上传文件的相关信息,如果为单个文件上传,那么该数组为二维数组,如果为多个文件上传,那么该数组为三维数组。
建立一个file.html演示上传文件,其中的代码如下:
<html> <head></head> <body></body> <form enctype="multipart/form-data" action="file.php" method="POST"> Send this file: <input name="userfile" type="file" /> <input type="submit" value="Send File" /> </form> </html>
新建一个用于接收文件信息的PHP文件file.php,代码如下:
<?php echo "<pre>"; print_r($_FILES); ?>
在file.html页面选择文件后,单击Send File按钮,将会在页面输出以下信息:
Array ( [userfile] => Array ( [name] => Screen Shot 2016-05-12 at 18.13.24.png [type] => image/png [tmp_name] => /private/var/tmp/phplVHp3W [error] => 0 [size] => 344925 ) )
$_COOKIE[]全局数组存储了通过HTTP COOKIE传递到脚本的信息,PHP可通过setcookie()函数设置COOKIE的值,用$_COOKIE[]数组接收COOKIE的值,$_COOKIE[]数组的索引为COOKIE的名称。
$_SESSION[]数组用于获取会话变量的相关信息。
默认情况下,$_REQUEST[]数组包含了$_GET、$_POST和$_COOKIE的数组。