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设计模式 Delegation(委托模式)
Jun 26 PHP
php的数组与字符串的转换函数整理汇总
Jul 18 PHP
php实现分页工具类分享
Jan 09 PHP
php获取访问者IP地址汇总
Apr 24 PHP
PHP封装CURL扩展类实例
Jul 28 PHP
优化WordPress中文章与评论的时间显示
Jan 12 PHP
PHPCMS2008广告模板SQL注入漏洞修复
Oct 11 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
Aug 15 PHP
Laravel用户授权系统的使用方法示例
Sep 16 PHP
PHP创建XML接口示例
Jul 04 PHP
laravel model 两表联查示例
Oct 24 PHP
PHP连接MySQL数据库三种实现方法
Dec 10 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
php在window iis的莫名问题的测试方法
2013/05/14 PHP
php实现的RSS生成类实例
2015/04/23 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
2011/01/17 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
2015/02/28 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
javascript中offset、client、scroll的属性总结
2015/08/13 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
js中字符型和数值型数字的互相转化方法(必看)
2017/04/25 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
2019/03/15 Javascript
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
Python ljust rjust center输出
2008/09/06 Python
Python实现的数据结构与算法之队列详解
2015/04/22 Python
Python 类与元类的深度挖掘 II【经验】
2016/05/06 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
python三大神器之fabric使用教程
2019/06/10 Python
Python小程序 控制鼠标循环点击代码实例
2019/10/08 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
入党申请自荐书范文
2014/02/11 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书
vue 把二维或多维数组转一维数组
2022/04/24 Vue.js
MySQL中JOIN连接的基本用法实例
2022/06/05 MySQL