首页 技术 正文
技术 2022年11月14日
0 收藏 855 点赞 4,956 浏览 2144 个字

PHP中许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。超全局变量除了具有全局变量特点外,在函数或方法中无需执行global $variable;就可以访问它们。

提供超全局数组的原因是为了让程序员更方便快捷的写出PHP程序。

PHP提供了九种超全局变量是:$GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV。

1,$_GET:通过URL参数传递给当前脚本的变量的数组,apache的php模块将$_GET传递参数封装到$_GET数组中传递给相应的php页面。

(1)$_GET实际使用情况:

① 客户机(浏览器)通过超链接传递信息给服务器;

a1.php

echo "<a href='a2.php?city=北京号&name=xiaoming'>传送数据</a>";

 a2.php

var_dump($_GET);

 浏览器传输中文字符时候,会出现乱码,解决方法:

(a) 发送端的奇数中文加一个全角空格,然后到服务器接收,去掉两头的空行trim();

(b) 发送端的中文使用urlencode编码,服务器端使用urldecode解码;现在PHP会自动解码,但是在编程时候最好加上urldecode解码。

a1.php

$str = urlencode('北京号码');
echo "<a href='a2.php?city=".$str."&name=xiaoming'>传送数据</a>";

a2.php

var_dump(urldecode($_GET['city']));

② 客户机(浏览器)通过表单传递信息给服务器;推荐使用$_POST方式传递表单参数。

(2)判断$_GET参数是否为空,推荐使用empty判断,也可以使用isset()。

(3)$_GET使用陷阱,在php.ini中register_globals = off,如果修改为on,则有注入的风险。

b.php

echo $name."---".$age;

使用超链接访问b.php时候,在地址栏输入http://localhost/b.php?name=ada&age=12 ,b.php页面由于错误,无法正常显示,如果把register_globals开启,那么b.php页面则会正常显示,这样存在很大风险,所以不能开始register_globals。

2,$_POST,apache的php模块将$_POST传递参数封装到$_POST数组中传递给相应的php页面。$_POST在传递中文时候,自动为你编码,在服务器端在自动解码,因此不会出现乱码情况。

3,$_REQUEST

定义:$_REQUEST中的变量通过GET、POST和COOKIE输入机制传递给脚本文件,$_REQUEST可以包括$_GET/$_POST/$_COOKIE数组,范围更大了。$_REQUEST可以被远程用户篡改而并不可信,因此这个不建议使用。之前当我们不知道数据是以那种方式传递过来数据时候,可以用$_REQUEST,现在这种情况下也可以不用$_REQUEST,比如如下代码:

if($_SERVER['REQUEST_METHOD'] == 'POST'){
echo $_POST['名字'];
}else if($_SERVER['REQUEST_METHOD'] == 'GET'){
echo $_GET['名字'];
}else if($_SERVER['REQUEST_METHOD'] == 'COOKIE'){
echo $_COOKIE['名字'];
}

  PHP中预定义超全局数组(变量)

4,$_SERVER

$_SERVER中主要包含了http请求行和消息头的信息,同时还有服务器自己的一些信息,比如DOCUMENT_ROOT,SCRIPT_FILENAME。

5,$_ENV

$_ENV在新版本PHP已经禁用,如果开启,需要修改php.ini的variables_order=”EGPCS”,但是在开发环境下不建议启用。

6,$_FILE与文件上传相关,$_COOKIE与COOKIE相关,$_SESSION与SESSION相关。

7,$GLOBALS

引用全局作用域中可用的全部变量,包含了全部变量的全局组合数组。变量的名字就是数组的键,同时一个自定义的全局变量,也会自动的被$GLOBALS管理。示例如下:

function test(){
$foo = "local variable";
echo '$foo in global scope:'.$GLOBALS["foo"]."\n";
echo '$foo in current scope:'.$foo."\n";
}
$foo = "Example content";
test();

输出如下:

$foo in global scope: Example content
$foo in current scope: local variable

浏览器传输中文字符时候,会出现乱码,解决方法:

(a) 发送端的奇数中文加一个全角空格,然后到服务器接收,去掉两头的空行trim();
(b) 发送端的中文使用urlencode编码,服务器端使用urldecode解码;现在PHP会自动解码,但是在编程时候最好加上urldecode解码。
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,000
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,512
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,358
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,141
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,771
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,849