超级全局变量

PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。

PHP 超级全局变量列表:

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

$GLOBALS

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

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

$x = 75; $y = 25;
function addition1() {
  $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition1();
echo $z; // 100
function addition2() {
  $t = $GLOBALS['x'] + $GLOBALS['y'];
}
addition2();
echo $t; // Notice: Undefined variable: t

$_SERVER

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

ksort($_SERVER);
foreach ($_SERVER as $key => $value) {
  echo '<b>'.$key.'</b>' .' => ' .$value .'<br>======<br>';
}

一些常用的的元素:

元素 解释
PHP_SELF 当前执行脚本的文件名
SCRIPT_FILENAME 当前执行脚本的绝对路径
SERVER_ADDR 当前运行脚本所在的服务器的 IP 地址
SERVER_NAME 当前运行脚本所在的服务器的主机名
SERVER_PORT Web 服务器使用的端口
REQUEST_METHOD 访问页面使用的请求方法;例如,"GET", "HEAD","POST","PUT"
REQUEST_TIME 请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496)
REMOTE_ADDR 浏览当前页面的用户的 IP 地址
REMOTE_PORT 用户机器上连接到 Web 服务器所使用的端口号
HTTP_ORIGIN 来源服务器地址,跨域调用时会出现,通常没有此参数
QUERY_STRING query string(查询字符串)
HTTP_REFERER 引导用户代理到当前页的前一页的地址,该值并不可信
HTTP_USER_AGENT 由 user agent 设置决定
HTTP_ACCEPT 请求头中 Accept: 项的内容
HTTP_HOST 请求头中 Host: 项的内容

通过 $_SERVER['HTTP_ORIGIN'] 进行跨域设置

手册里面居然查不到 $_SERVER['HTTP_ORIGIN'] 相关的信息。不过在网上一搜,几乎都是关于其用于设置跨域问题的。

$origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
$allow_origin = array(
  'http://www.a.com',
  'http://www.b.com'
);
if(in_array($origin, $allow_origin)){
  header('Access-Control-Allow-Origin:'.$origin);
  header('Access-Control-Allow-Methods:POST');
  header('Access-Control-Allow-Headers:x-requested-with,content-type');
}

本人通常会使用此参数进行来源判断,以做不同的处理,比如同一个接口,但是在测试环境和生产环境调用有不同的处理。

$_REQUEST

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

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

$_POST

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

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

$_GET

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

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

$_GET 也可以收集URL中发送的数据。

<a href="<?php echo $_SERVER['PHP_SELF'];?>?fname=yu&fage=18">Test $GET</a>
<?php
  echo $_GET['fname'];
  echo $_GET['fage'];
?>

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress