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 强制性文件下载功能的函数代码(任意文件格式)
May 26 PHP
PHP测试程序运行时间的类
Feb 05 PHP
php实现自动获取生成文章主题关键词功能的深入分析
Jun 03 PHP
深入php多态的实现详解
Jun 09 PHP
php增删改查示例自己写的demo
Sep 04 PHP
使用PHP生成PDF方法详解
Jan 23 PHP
PHP 使用redis简单示例分享
Mar 05 PHP
PHP性能优化大全(php.ini)
May 20 PHP
PHP 类与构造函数解析
Feb 06 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 PHP
PHP实现的AES 128位加密算法示例
Sep 16 PHP
PhpStorm连接服务器并实现自动上传功能
Dec 09 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
《心理测量者3》剧场版动画预告
2020/03/02 日漫
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
JS 实现双色表格实现代码
2009/11/24 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
JQuery中的事件及动画用法实例
2015/01/26 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
2016/04/29 Javascript
原生js实现无限循环轮播图效果
2017/01/20 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
[01:38:19]夜魇凡尔赛茶话会 第五期
2021/03/11 DOTA
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
2019/08/13 Python
python变量的作用域是什么
2020/05/26 Python
护理自我鉴定范文
2013/10/06 职场文书
小学生成长感言
2014/01/30 职场文书
保险经纪人求职信
2014/03/11 职场文书
纪检监察建议书
2014/05/19 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
比赛口号大全
2014/06/10 职场文书
大学学雷锋活动总结
2014/06/26 职场文书
2014年团队工作总结
2014/11/24 职场文书
通讯稿格式及范文
2015/07/22 职场文书
基于Go语言构建RESTful API服务
2021/07/25 Golang