PHP超级全局变量

0x01 全局变量和局部变量

全局变量:定义在函数外部变量的就是全局变量,它的作用域是从定义处一直到文件结尾。

局部变量:函数内定义的变量就是局部变量,它的作用域为函数内。

函数内,一般情况下是访问不了全局变量的

例:

1
2
3
4
5
6
7
8
9
<?php
$a=9;
$b=6;
function add()
{
echo $a+$b;//输出0
}
add();
?>

在函数内要是需要访问全局变量就需要使用global关键字或使用 $GLOBALS[index]数组(超全局变量)。

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$a=9;
$b=6;
function add()
{
//使用global关键字
global $a,$b;
echo $a+$b;//输出15
echo "<br />";
//使用$GLOBALS[]数组
echo $GLOBALS['a']+$GLOBALS['b'];//输出15
}
add();
?>

0x02 超级全局变量

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

PHP中的超全局变量:

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

1、$GLOBALS

一个包含了全部变量的全局组合数组。变量的名字就是数组的键,变量的值就是键对应的值。

例:

1
2
3
4
5
6
7
8
9
10
11
<?php
$a=9;
$b=6;
function add()
{
$GLOBALS['c']=$GLOBALS['a']+$GLOBALS['b'];
//c被定义成了超全局变量,在函数外也可以访问
}
add();
echo $c;//输出15
?>

2、$_SERVER

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。

例:

1
2
3
4
5
<?php
echo "<pre>";
var_dump($_SERVER);
echo "</pre>";
?>

在这里插入图片描述

3、$_POST

$_POST用于接收浏览器以post形式传递过来的数据,主要用于收集表单数据。

例:

1
2
3
4
5
6
7
8
9
10
11
<?php
if(isset($_POST['submit']))
{
var_dump($_POST['name']);
}
?>

<form method="post">
<input type="text" name="name">
<input type="submit" name="submit">
</form>

在这里插入图片描述

4、$_GET

$_GET用于接收浏览器以get形式传递过来的数据,也主要用于接收表单数据,不过get的传递方式相对于post而言安全性较低。

1
2
3
4
5
6
7
8
9
10
11
<?php
if(isset($_GET['submit']))
{
var_dump($_GET['name']);
}
?>

<form method="get">
<input type="text" name="name">
<input type="submit" name="submit">
</form>

在这里插入图片描述

5、$_REQUEST

$_REQUEST是一个默认情况下包含了 $_GET$_POST$_COOKIE 的数组。

例:

1
2
3
4
5
6
7
8
<?php
setcookie("c",'cookie',time()+3600);
$_GET['g'];
$_POST['p'];
echo "<pre>";
var_dump($_REQUEST);
echo "</pre>";
?>

在这里插入图片描述

6、$_FILES

$_FILES主要用于接收上传过来的文件的各项信息,是一个二维数组。第一维用于储存input标签中type类型为filename属性的值,第二维用于储存文件的各项信息。

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
if(isset($_POST['submit']))
{
echo "<pre>";
var_dump($_FILES['myfile']);
echo "</pre>";
}
?>

<meta charset="utf-8" />
<form method="post" enctype="multipart/form-data">
<input type="file" name="myfile">
<input type="submit" name="submit" value="文件上传">
</form>

在这里插入图片描述

$_FILES数组内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$_FILES['myfile']['name'] //客户端文件的原名称。 

$_FILES['myfile']['type'] //文件的 MIME 类型,需要浏览器提供该信息的支持。

$_FILES['myfile']['size'] //已上传文件的大小,单位为字节。

$_FILES['myfile']['tmp_name'] //文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。

$_FILES['myfile']['error'] //和该文件上传相关的错误代码。
有关error值的说明:

值:0; 没有错误发生,文件上传成功。

值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。

值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。

值:3; 文件只有部分被上传。

值:4; 没有文件被上传。

值:5; 上传文件大小为0。

7、$_ENV

$_ENV是一个包含服务器端环境变量的数组。$_ENV只是被动的接受服务器端的环境变量并把它们转换为数组元素,你可以尝试直接输出它。

例:

1
2
3
4
<?php
//print_r($_ENV);
var_dump($_ENV);
?>

在这里插入图片描述
如果打印输出 $_ENV 为空,可能是 php.ini 的配置的原因:

variables_order = "GPCS"

要想让$_ENV的值不为空,则需要修改variables_orde为:

variables_order = "EGPCS"

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

$_COOKIE用来存储cookie的值,如果使用了setcookie()函数,只有在cookie的存活时间内,都可以在$_COOKIE中访问到。而且只要在一个脚本中执行了setcookie()函数,在其他脚本中都可以访问到。

例:

1
2
3
4
5
6
7
8
9
//文件test1中
<?php
setcookie('name','xiaoming',time()+3600);
?>

//文件test2中
<?php
var_dump($_COOKIE);
?>

先访问test1,让浏览器执行setcookie()函数,然后再访问test2。

在这里插入图片描述

9、$_SESSION

$_SESSION用于接收session的值,session的设置与cookie不同,要想在不同脚本里访问到$_SESSION里的值,在使用前得先使用session_start()函数创建一个会话,

例:

1
2
3
4
5
6
7
8
9
10
11
12
//文件test1中
<?php
session_start();
$_SESSION['name']="lihua";
$_SESSION['age']=18;
?>

//文件test2中
<?php
session_start();
var_dump($_SESSION);
?>

在这里插入图片描述

文章目录
  1. 1. 0x01 全局变量和局部变量
  2. 2. 0x02 超级全局变量
    1. 2.0.1. 1、$GLOBALS
    2. 2.0.2. 2、$_SERVER
    3. 2.0.3. 3、$_POST
    4. 2.0.4. 4、$_GET
    5. 2.0.5. 5、$_REQUEST
    6. 2.0.6. 6、$_FILES
    7. 2.0.7. 7、$_ENV
    8. 2.0.8. 8、$_COOKIE
    9. 2.0.9. 9、$_SESSION
|