PHP中预定义超全局数组(变量)
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['名字'];
}
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解码。
最新文章
- Windows 7 在资源管理器中显示软件快捷方式
- vps云服务器建站后绑定域名的方法?
- Java命名约定
- linux共享内存实验
- uafxcwd.lib(afxmem.obj) : error LNK2005 解决方法
- [LeetCode] Consecutive Numbers 连续的数字 --数据库知识(mysql)
- 【Android】利用服务Service创建标题栏通知
- (转)DES、RSA、MD5、SHA、随机生成加密与解密
- CenOS中下载RPM包
- kali2.0如何安装中文输入法
- news总结
- Advanced Customization of the jQuery Mobile Buttons | Appcropolis
- Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8
- Delphi基础-数据类型
- C#编写一个大字母游戏,详细代码,不懂问博主。。。。
- storybook构建vue组件
- eclipse中js报错简单快捷的解决方式
- Ubuntu中通过SuperVisor添加守护进程
- 有关Web常用字体的研究?
- centOS连接没问题,使用SecureCRT就不能连接