- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
一、$GLOBALS
$GLOBALS 是一个包含所有全局变量的数组,数组的键就是变量的名字。
function test() {$foo = "局部变量";echo '$foo在全局作用域中的值:' . $GLOBALS["foo"] . "<br>";echo '$foo在当前作用域中的值:' . $foo . "<br>";
}$foo = "全局变量";
test();
输出
$foo在全局作用域中的值:全局变量
$foo在当前作用域中的值:局部变量
二、$_SERVER
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等信息的数组。这个数组中的条目由 Web 服务器创建,所以不能保证每个 Web 服务器都提供全部条目;服务器可能会忽略一些,或者提供此处没有列举出来的其它内容。
下表列出了 $_SERVER 中重要的元素:
元素/代码 | 描述 |
$_SERVER['PHP_SELF'] | 返回当前执行脚本的文件名。 |
$_SERVER['GATEWAY_INTERFACE'] | 返回服务器使用的 Common 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.1)。 |
$_SERVER['REQUEST_METHOD'] | 返回用于访问页面的请求方法(如 POST)。 |
$_SERVER['REQUEST_TIME'] | 返回请求开始的时间戳(如 1377687496)。 |
$_SERVER['QUERY_STRING'] | 如果页面是通过查询字符串访问的,则返回查询字符串。 |
$_SERVER['HTTP_ACCEPT'] | 返回当前请求的 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'] | 返回在 Web 服务器配置文件中为 SERVER_ADMIN 指令给定的值。 |
$_SERVER['SERVER_PORT'] | 返回服务器上 Web 服务器用于通信的端口(如 80)。 |
$_SERVER['SERVER_SIGNATURE'] | 返回添加到服务器生成页面的服务器版本和虚拟主机名。 |
$_SERVER['PATH_TRANSLATED'] | 返回当前脚本基于文件系统的路径。 |
$_SERVER['SCRIPT_NAME'] | 返回当前脚本的路径。 |
$_SERVER['SCRIPT_URI'] | 返回当前页面的 URI。 |
示例
echo $_SERVER["SERVER_NAME"] . "<br>";
echo $_SERVER["HTTP_HOST"] . "<br>";
echo $_SERVER["SCRIPT_NAME"] . "<br>";
三、$_REQUEST
$_REQUEST 是 PHP 的一个超全局变量,它包含了提交的表单数据和所有的 cookie 数据,默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。也就是说,我们可以通过 $_REQUEST 关键字加上表单字段或 cookie 的名称来访问这些数据。
接下来我们创建一个 HTML 的表单,然后使用 $_REQUEST 来获取表单提交的数据,然后将获取到的表单数据显示在页面上。
<html><body><form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">名字:<input type="text" name="username" /><input type="submit" /></form><?phpif ($_SERVER["REQUEST_METHOD"] == "POST") {$name = htmlspecialchars($_REQUEST["username"]);if (!empty($name)) {echo "<h1>名字是:$name</h1>";}}?></body>
</html>
四、$_POST
当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded(表单数据以键值对的形式编码并发送到服务器。它是 HTML 表单默认的编码方式。) 或 multipart/form-data(用于在 Web 表单中上传文件或提交包含二进制数据的表单。它允许在单个 HTTP 请求中发送多个不同类型的数据(如文本字段和文件)。) 时,会将变量以关联数组形式传入当前脚本。
<html><body><form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">名字:<input type="text" name="username" /><input type="submit" /></form><?phpif ($_SERVER["REQUEST_METHOD"] == "POST") {$name = htmlspecialchars($_POST["username"]);if (!empty($name)) {echo "<h1>名字是:$name</h1>";}}?></body>
</html>
五、$_GET
通过 URL 参数(又叫查询字符串)传递给当前脚本的变量的数组。注意:该数组不仅仅对表单 method 为 GET 的请求生效,而是会针对所有带 查询字符串 的请求。
<a href="demo_get.php?name=Hello">测试 $_GET</a>
demo_get.php
<?php
echo "<h1>" . $_GET["name"] . "</h1>";
六、其它超全局变量
其它的超全局变量在这里只做简单的说明,具体的使用会在后续的篇章中给出。
$_FILES — HTTP 文件上传变量:通过 HTTP POST 方式上传到当前脚本的项目的数组。
$_ENV — 环境变量:通过环境方式传递给当前脚本的变量的数组。这些变量被从 PHP 解析器的运行环境导入到 PHP 的全局命名空间。很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能运行着不同种类的 Shell,所以 $_ENV 数组中的内容是和当前运行环境相关的。
$_COOKIE — HTTP Cookies:通过 HTTP Cookies 方式传递给当前脚本的变量的数组。
$_SESSION — Session 变量:当前脚本可用 SESSION 变量的数组。