PHP中的超全局变量能在一个脚本的全部作用域中都可用,在函数或方法中无需执行global $value就能访问。这些超全局变量有:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_COOKIE
  • $_SESSION
  • $_ENV

一. $GLOBALS

$GLOBALS[index]数组中存储了所有的全局变量,可在PHP脚本中的任意位置访问。

实例:

$x = 75; 
$y = 25;

function addition() { 
  $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; 
}

addition(); 
echo $z;  // 100

在该实例中,由于z变量是$GLOBALS数组中的变量,因此可以在该脚本的任何一个位置访问。

二. $_SERVER

$_SERVER主要保存了报头、路径和脚本位置的信息。

具体如下:

元素/代码 描述
$_SERVER['PHP_SELF'] 返回当前执行脚本的文件名。
$_SERVER['GATEWAY_INTERFACE'] 返回服务器使用的 CGI 规范的版本。
$_SERVER['SERVER_ADDR'] 返回当前运行脚本所在的服务器的 IP 地址。
$_SERVER['SERVER_NAME'] 返回当前运行脚本所在的服务器的主机名(比如 www.w3school.com.cn)。
$_SERVER['SERVER_SOFTWARE'] 返回服务器标识字符串(比如 Apache/2.2.24)。
$_SERVER['SERVER_PROTOCOL'] 返回请求页面时通信协议的名称和版本(例如,“HTTP/1.0”)。
$_SERVER['REQUEST_METHOD'] 返回访问页面使用的请求方法(例如 POST)。
$_SERVER['REQUEST_TIME'] 返回请求开始时的时间戳(例如 1577687494)。
$_SERVER['QUERY_STRING'] 返回查询字符串,如果是通过查询字符串访问此页面。
$_SERVER['HTTP_ACCEPT'] 返回来自当前请求的请求头。
$_SERVER['HTTP_ACCEPT_CHARSET'] 返回来自当前请求的 Accept_Charset 头( 例如 utf-8,ISO-8859-1)
$_SERVER['HTTP_HOST'] 返回来自当前请求的 Host 头。
$_SERVER['HTTP_REFERER'] 返回当前页面的完整 URL(不可靠,因为不是所有用户代理都支持)。
$_SERVER['HTTPS'] 是否通过安全 HTTP 协议查询脚本。
$_SERVER['REMOTE_ADDR'] 返回浏览当前页面的用户的 IP 地址。
$_SERVER['REMOTE_HOST'] 返回浏览当前页面的用户的主机名。
$_SERVER['REMOTE_PORT'] 返回用户机器上连接到 Web 服务器所使用的端口号。
$_SERVER['SCRIPT_FILENAME'] 返回当前执行脚本的绝对路径。
$_SERVER['SERVER_ADMIN'] 该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。
$_SERVER['SERVER_PORT'] Web 服务器使用的端口。默认值为 “80”。
$_SERVER['SERVER_SIGNATURE'] 返回服务器版本和虚拟主机名。
$_SERVER['PATH_TRANSLATED'] 当前脚本所在文件系统(非文档根目录)的基本路径。
$_SERVER['SCRIPT_NAME'] 返回当前脚本的路径。
$_SERVER['SCRIPT_URI'] 返回当前页面的 URI。

【备注:该表转载自http://www.w3school.com.cn/php/php_superglobals.asp

三. $_REQUEST

$_REQUEST主要用于收集HTML表单提交的数据,包括GET和POST请求的数据。

$_REQUEST[index]中index的值为表单提交的name属性值。

四. $_POST

$_POST主要收集POST请求的表单数据。

五. $_GET

$_GET主要收集GET请求的表单数据。

六. $_FILES

全局变量 $_FILES 自 PHP 4.1.0 起存在(在更早的版本中用 $HTTP_POST_FILES 替代)。此数组包含有所有上传的文件信息:

  • $_FILES["userfile"]["name"]:客户端源文件名;
  • $_FILES["userfile"]["type"]:上传文件的类型;
  • $_FILES["userfile"]["size"]:上传文件的字节数;
  • $_FILES["userfile"]["tmp_name"]:文件上传后在服务器上的临时存储文件名;
  • $_FILES["userfile"]["error"]:返回由文件上传中有可能出现的错误的状态码;

备注:上传文件的form表单需要添加enctype="multipart/form-data"属性。

其中,$_FILES["userfile"]["error"]的7种状态码具体如下:

  • $_FILES["userfile"]["error"] = 0 // 没有错误发生,文件上传成功;
  • $_FILES["userfile"]["error"] = 1 // 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值;
  • $_FILES["userfile"]["error"] = 2 // 文件大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值;
  • $_FILES["userfile"]["error"] = 3 // 文件部分被上传;
  • $_FILES["userfile"]["error"] = 4 // 没有文件被上传;
  • $_FILES["userfile"]["error"] = 5 // 上传文件大小为0,或服务器临时文件夹丢失;
  • $_FILES["userfile"]["error"] = 6 // 没有上传权限,文件写入到临时文件夹出错;

实例如下:

<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="myFile" />
</form>

upload.php:

// 上传文件的路径
$uploaddir  =  "/uploads/";
// 上传文件的文件名
$uploadfile  =  $uploaddir.basename($_FILES["myFile"]["name"]);
// 检查文件是否上传成功;如果成功,则将上传文件的文件名作为临时文件名
if (move_uploaded_file($_FILES["myFile"]["tmp_name"], $uploadfile)) {
    echo  "File is successfully uploaded.\n" ;
} else {
    echo  "File can't be uploaded!\n" ;
}
// 打印上传文件信息
 print_r ($_FILES);

七. $_COOKIE

1. 创建cookie

setcookie() 函数用于设置 cookie,并且必须位于 标签之前。

语法:setcookie(name, value[, expire][, path][, domain]);

<?php 
setcookie("user", "someOne", time()+3600);
?>
<html>
    <body>
    </body>
</html>

2. 获取cookie

$_COOKIE 变量可获取 cookie 的值。

如:

print_r($_COOKIE["user"]);

3. 删除cookie

要删除 cookie,可使过期日期变更为过去的时间点即可。

setcookie("user", "", time()-3600);

八. $_SESSION

$_SESSION变量用于存储有关用户会话的信息,或更改用户会话的设置。

Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。

1. 开始Session

在您把用户信息存储到 PHP session 中之前,首先必须启动会话。

session_start()函数可启动会话,向服务器注册用户的会话,以便开始保存用户信息,同时会为用户会话分配一个 UID。session_start()函数必须位于 标签之前。

实例:

<?php session_start(); ?>
<html>
    <body>
    </body>
</html>

2. 存储 Session 变量

可使用$_SESSION变量来存储和取回session 变量。

实例:

<?php
session_start();
// store session data
$_SESSION['views']=1;
?>
<html>
    <body>
        <?php
        echo "Pageviews=". $_SESSION['views']; // 1
        ?>
    </body>
</html>

3. 终结 Session

可以使用 unset() 或 session_destroy() 函数删除某些 session 数据。

unset() 函数用于释放指定的 session 变量:

<?php
    unset($_SESSION['views']);
?>

也可以通过 session_destroy() 函数彻底终结 session:

<?php
    session_destroy();
?>

注释:session_destroy() 将重置 session,并失去所有已存储的 session 数据。

九. $_ENV

$_ENV是环境变量。在 PHP 4.1.0 及以后版本使用,之前的版本使用 $HTTP_ENV_VARS。在解析器运行时,这些变量从环境变量转变为 PHP 全局变量名称空间(namespace)。

$_ENV 数组中的元素随服务器环境不同而有较大差异,所以无法列出完整的列表。

$_ENV 为空的原因及解决办法

如果打印输出 $_ENV 为空,可以检查一下 php.ini 的配置:

variables_order = "EGPCS"

上述配置表示 PHP 接受的外部变量来源及顺序,EGPCS 是 Environment、Get、Post、Cookies 和 Server 的缩写。如果 variables_order 的配置中缺少 E ,则 PHP 无法接受环境变量,那么 $_ENV 也就为空了。

本文作者:子匠_Zijor,转载请注明出处:http://www.dengzhr.com/others/backend/php/558