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脚本的10个技巧(4)
Oct 09 PHP
第五节--克隆
Nov 16 PHP
php实现MD5加密16位(不要默认的32位)
Aug 12 PHP
PHP实现采集抓取淘宝网单个商品信息
Jan 08 PHP
微信公众平台DEMO(PHP)
May 04 PHP
php中序列化与反序列化详解
Feb 13 PHP
Django 中 cookie的使用
Aug 17 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 PHP
PHP实现的获取文件mimes类型工具类示例
Apr 08 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
Jun 04 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
域名查询代码公布
2006/10/09 PHP
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
js下用gb2312编码解码实现方法
2009/12/31 Javascript
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
有趣的javascript数组定义方法
2010/09/10 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
动态加载js和css(外部文件)
2013/04/17 Javascript
浏览器页面区域大小的js获取方法
2013/09/21 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
Vue性能优化的方法
2020/07/30 Javascript
[55:16]Mski vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python操作Word批量生成文章的方法
2015/07/28 Python
python实现网站的模拟登录
2016/01/04 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
python enumerate内置函数用法总结
2020/01/07 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
python集合能干吗
2020/07/19 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
秦兵马俑教学反思
2014/02/07 职场文书
餐饮部总监岗位职责范文
2014/02/13 职场文书
活动总结报告怎么写
2014/07/03 职场文书
绿色小区申报材料
2014/08/22 职场文书
实习生个人总结范文
2015/02/28 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技