PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)


Posted in PHP onFebruary 05, 2012

register_globals的值可以设置为:On或者Off,我们举一段代码来分别描述它们的不同。
代码:

<form name="frmTest" id="frmTest" action="URL"> 
<input type="text" name="user_name" id="user_name"> 
<input type="password" name="user_pass" id="user_pass"> 
<input type="submit" value="login"> 
</form>

当register_globals=Off的时候,下一个程序接收的时候应该用$_GET['user_name']和$_GET['user_pass']来接受传递过来的值。(注:当<form>的method属性为post的时候应该用$_POST['user_name']和$_POST['user_pass'])

当register_globals=On的时候,下一个程序可以直接使用$user_name和$user_pass来接受值。

顾名思义,register_globals的意思就是注册为全局变量,所以当On的时候,传递过来的值会被直接的注册为全局变量直接使用,而Off的时候,我们需要到特定的数组里去得到它。所以,碰到上边那些无法得到值的问题的朋友应该首先检查一下你的register_globals的设置和你获取值的方法是否匹配。(查看可以用phpinfo()函数或者直接查看php.ini)

那我们为什么要使用Off呢?原因有2:
1、php以后的新版本默认都用Off,虽然你可以设置它为On,但是当你无法控制服务器的时候,你的代码的兼容性就成为一个大问题,所以,你最好从现在就开始用Off的风格开始编程
2、这里有两篇文章介绍为什么要Off而不用On 

http://www.php.net/manual/en/security.registerglobals.php

现在还有一个问题就是,以前用On风格写的大量脚本怎么办?
如果你以前的脚本规划得好,有个公共包含文件,比如config.inc.php一类的文件,在这个文件里加上以下的代码来模拟一下。
代码:

<?php 
if ( !ini_get('register_globals') ) 
{ 
extract($_POST); 
extract($_GET); 
extract($_SERVER); 
extract($_FILES); 
extract($_ENV); 
extract($_COOKIE); if ( isset($_SESSION) ) 
{ 
extract($_SESSION); 
} 
} 
?>

register_globals = Off的情况不仅仅影响到如何获取从<form>、url传递过来的数据,也影响到session、cookie,对应的,得到session、cookie的方式应该为:$_SESSION[]、$_COOKIE。同时对于session的处理也有一些改变,比如,session_register()没有必要而且失效,具体的变化,请查看php manual里的Session handling functions

$_REQUEST中间的内容实际上还是来源于$_GET $_POST $_COOKIE,缺点是无法判断变量到底来自于get post 还是cookie,对要求比较严格的场合不适用。

PHP 相关文章推荐
通用PHP动态生成静态HTML网页的代码
Mar 04 PHP
PHP 魔术函数使用说明
May 14 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
Jan 27 PHP
PHP设计模式之代理模式的深入解析
Jun 13 PHP
php使用curl和正则表达式抓取网页数据示例
Apr 13 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
Jun 19 PHP
php禁止某ip或ip地址段访问的方法
Feb 25 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
phpcms中的评论样式修改方法
Oct 21 PHP
Zend Framework前端控制器用法示例
Dec 11 PHP
PHP注释语法规范与命名规范详解篇
Jan 21 PHP
PHP中使用数组实现堆栈数据结构的代码
Feb 05 #PHP
PHP使用数组实现队列
Feb 05 #PHP
mysql数据库差异比较的PHP代码
Feb 05 #PHP
PHP反转字符串函数strrev()函数的用法
Feb 04 #PHP
PHP __autoload函数(自动载入类文件)的使用方法
Feb 04 #PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
Feb 04 #PHP
PHP中的cookie不用刷新就生效的方法
Feb 04 #PHP
You might like
Cappuccino 卡布其诺咖啡之制作
2021/03/03 冲泡冲煮
PHP防CC攻击实现代码
2011/12/29 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
php使用MySQL保存session会话的方法
2015/06/26 PHP
php实现小程序支付完整版
2018/10/09 PHP
Stop SQL Server
2007/06/21 Javascript
js解析与序列化json数据(二)序列化探讨
2013/02/01 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
2016/12/25 Javascript
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
2019/06/19 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
2020/07/22 Javascript
在vue中实现嵌套页面(iframe)
2020/07/30 Javascript
python pickle 和 shelve模块的用法
2013/09/16 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
专科毕业生就业推荐信
2013/11/01 职场文书
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
矫正人员思想汇报
2014/01/08 职场文书
运动会入场词100字
2014/02/06 职场文书
上课迟到检讨书
2015/05/06 职场文书
劳动模范获奖感言
2015/07/31 职场文书