PHP 全局变量 - 超全局变量

超全局变量 在 PHP 4.1.0 中引入,是在全部作用域中始终可用的内置变量。

PHP 全局变量 - 超全局变量

PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global 

$变量名; 就可以访问它们。

PHP 超级全局变量列表:

·   $GLOBALS

·   $_SERVER

·   $_REQUEST

·   $_POST

·   $_GET

·   $_FILES

·   $_ENV

·   $_COOKIE

·   $_SESSION

本章节我们将讲解几个常用的超级全局变量,其余变量我们在接下来几个章节会介绍到


PHP $GLOBALS

$GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。

$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

实例

以下实例介绍了如何使用超级全局变量 $GLOBALS:

<?php
 $x = 75;
 $y = 25;
 function addition()
 {
     $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
 }
 addition();
 echo $z;
 ?>

程序运行结果:

100

在上面的示例中 z 是一个$GLOBALS数组中的超级全局变量,该变量同样可以在函数外访问。


PHP $_SERVER

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。

实例

以下实例中展示了如何使用$_SERVER中的元素:

<?php
 echo $_SERVER['PHP_SELF'];
 echo "<br>";
 echo $_SERVER['SERVER_NAME'];
 echo "<br>";
 echo $_SERVER['HTTP_HOST'];
 echo "<br>";
 echo $_SERVER['HTTP_REFERER'];
 echo "<br>";
 echo $_SERVER['HTTP_USER_AGENT'];
 echo "<br>";
 echo $_SERVER['SCRIPT_NAME'];
 ?>

程序运行结果:

/Basis/superglobals/superglobals_1.php
localhost
localhost
http://localhost/Basis/superglobals/
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0
/Basis/superglobals/superglobals_1.php

可以对着下表来看看 $_SERVER 变量中的重要元素及解释

        元素/代码          描述

 





$_SERVER['PHP_SELF']

当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将得到 /test.php/foo.bar。__FILE__ 常量包含当前(例如包含)文件的完整路径和文件名。 从 PHP 4.3.0 版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用。
$_SERVER['GATEWAY_INTERFACE']服务器使用的 CGI 规范的版本;例如,"CGI/1.1"。
$_SERVER['SERVER_ADDR']当前运行脚本所在的服务器的 IP 地址。



$_SERVER['SERVER_NAME']

当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(如: www.php.cn)
$_SERVER['SERVER_SOFTWARE']服务器标识字符串,在响应请求时的头信息中给出。(如:Apache/2.2.24)
$_SERVER['SERVER_PROTOCOL']请求页面时通信协议的名称和版本。例如,"HTTP/1.0"。
$_SERVER['REQUEST_METHOD']访问页面使用的请求方法;例如,"GET", "HEAD","POST","PUT"。


$_SERVER['REQUEST_TIME']

请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496)
$_SERVER['QUERY_STRING']query string(查询字符串),如果有的话,通过它进行页面访问。
$_SERVER['HTTP_ACCEPT']当前请求头中 Accept: 项的内容,如果存在的话。
$_SERVER['HTTP_ACCEPT_CHARSET']当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:"iso-8859-1,*,utf-8"。
$_SERVER['HTTP_HOST']当前请求头中 Host: 项的内容,如果存在的话。




$_SERVER['HTTP_REFERER'

引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。)
$_SERVER['HTTPS']如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值
$_SERVER['REMOTE_ADDR']浏览当前页面的用户的 IP 地址。


$_SERVER['REMOTE_HOST']

浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。
$_SERVER['REMOTE_PORT']用户机器上连接到 Web 服务器所使用的端口号。



$_SERVER['SERVER_ADMIN']

该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。(如:someone@php.cn)



$_SERVER['SERVER_PORT']

Web 服务器使用的端口。默认值为 "80"。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。
$_SERVER['SERVER_SIGNATURE']包含了服务器版本和虚拟主机名的字符串。


$_SERVER['PATH_TRANSLATED']

当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。



$_SERVER['SCRIPT_NAME']

包含当前脚本的路径。这在页面需要指向自己时非常有用。__FILE__ 常量包含当前脚本(例如包含文件)的完整路径和文件名。

PHP $_REQUEST

PHP $_REQUEST 用于收集HTML表单提交的数据。

实例

以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至<form>标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_REQUEST 来收集表单中的input 字段数据:

<html>
 <body>
 
 <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
     Name: <input type="text" name="fname">
     <input type="submit">
 </form>
 
 <?php
 $name = $_REQUEST['fname'];
 echo $name;
 ?>
 
 </body>
 </html>

运行一下程序看看

在输入框里输入数据,提交查询

小提示action:我们可以给他指定提交到某个文件下,例如action="app.php",上面

 的例子因为我们不想在创建一个php文件,所以这段话<?php echo

 $_SERVER['PHP_SELF'];?>的意思是提交到自己的页面


PHP $_POST

 $_POST 变量用于收集来自 method="post" 的表单中的值


实例

使用超级全局变量 $_POST 来收集表单中的 input 字段数据:

<html>
 <body>
 <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
     Name: <input type="text" name="name">
     Age  :<input type="text" name="age">
     <input type="submit">
 </form>
 <?php
 $name = $_POST['name'];
 $age=$_POST['age'];
 echo $name ."<br/>";
 echo $age;
 ?>
 
 </body>
 </html>


PHP $_GET

PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。

 从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送的信息量也有限制(最多 100 

个字符)。

实例

使用超级全局变量 $_GET 来收集表单中的 input 字段数据:

<html>
 <body>
 <form method="get" action="<?php echo $_SERVER['PHP_SELF'];?>">
     Name: <input type="text" name="name">
     Age  :<input type="text" name="age">
     <input type="submit">
 </form>
 <?php
 $name = $_GET['name'];
 $age=$_GET['age'];
 echo $name ."<br/>";
 echo $age;
 ?>
 
 </body>
 </html>

程序运行结果:

2.png

提示: 你如果想学习更多关于 $_POST 和 $_GET 的知识,请访问我们的 PHP 表单 章节。



继续学习
||
<?php $x = 75; $y = 25; function addition() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } addition(); echo $z; ?>
提交重置代码
章节
笔记
提问
课件
反馈
捐赠

PHP 零基础入门教程

高并发千万级数据库系统解决方案
  • 推荐课程
  • 评论
  • 问答
  • 笔记
  • 课件下载

phpcn_u510

为什么运行了第一个实例 没有结果呢?

7年前    添加回复 1

lilove432

代码少一行吧

6年前    添加回复 0

focuson

到这一下懵了

7年前    添加回复 0

看透不说透

超全局变量讲的还是很详细的,内容多了,要花点时间看下了!

7年前    添加回复 0

运行结果报错

[最新 大瓶可乐 的回答] 修改php.ini设置,将register_globals值设置为on。

时间:1年前

显示不了运行结果

[最新 步履不停 的回答] 代码没有问题,建议把报错提示贴上来。$z输出结果为100

时间:4年前

超级全局变量

[最新 王龙 的回答] 老师 好期待 你的教程 angularJS rectJS vueJS 还都没出来啊。。官方的 重要 教程 还不全啊。。

时间:5年前

点击提交之后 不知道是否执行

[最新 赵蓝 的回答] $GLOBALS 一个包含了全部变量的全局组合数组。变量的名字就是数组的键所以会执行得到 $z的值为 100

时间:6年前

显示结果有问题

[最新 行者小司 的回答] 应该是你代码哪里出问题了?

时间:6年前

全局变量的$_REQUEST,$_POST,$_GET 这三者有什么区别么?

[最新 数据分析师 的回答] 全局变量的$_REQUEST,$_POST,$_GET 这三者有什么区别么?-PHP中文网问答-全局变量的$_REQUEST,$_POST,$_GET 这三者有什么区别么?-PHP中文网问答围观一下哦,学习一下。

时间:7年前

课件暂不提供下载,工作人员正在整理中,后期请多关注该课程~