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函数(简单整理)
Apr 30 PHP
PHP中break及continue两个流程控制指令区别分析
Apr 18 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
Sep 13 PHP
php标签云的实现代码
Oct 10 PHP
探讨php中遍历二维数组的几种方法详解
Jun 08 PHP
深入解析PHP内存管理之谁动了我的内存
Jun 20 PHP
php断点续传之如何分割合并文件
Mar 22 PHP
ThinkPHP行为扩展Behavior应用实例详解
Jul 22 PHP
php使用递归函数实现数字累加的方法
Mar 16 PHP
PHP下载远程图片的几种方法总结
Apr 07 PHP
Yii 2.0中场景的使用教程
Jun 02 PHP
PHP生成随机密码4种方法及性能对比
Dec 11 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实现 上一篇、下一篇的代码
2012/09/29 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
实例讲解PHP表单
2020/06/10 PHP
newxtree.js代码
2007/03/13 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
2012/11/07 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
Vue组件之Tooltip的示例代码
2017/10/18 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
python Django模板的使用方法(图文)
2013/11/04 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
python实现手机销售管理系统
2019/03/19 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
Python基于模块Paramiko实现SSHv2协议
2020/04/28 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
Tory Burch德国官网:美国时尚生活品牌
2018/01/03 全球购物
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
文明倡议书范文
2014/04/15 职场文书
擅自离岗检讨书
2014/09/12 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
2015年管理人员工作总结
2015/05/13 职场文书
趣味运动会通讯稿
2015/07/18 职场文书
婚庆答谢词大全
2015/09/29 职场文书
七年级数学教学反思
2016/02/17 职场文书