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 相关文章推荐
将数字格式的计算结果转为汉字格式
Oct 09 PHP
BBS(php &amp; mysql)完整版(三)
Oct 09 PHP
在PHP中使用灵巧的体系结构
Oct 09 PHP
我的论坛源代码(二)
Oct 09 PHP
php共享内存段示例分享
Jan 20 PHP
PHPStrom中实用的功能和快捷键大全
Sep 23 PHP
浅析Yii2 gridview实现批量删除教程
Apr 22 PHP
php实现跨域提交form表单的方法【2种方法】
Oct 17 PHP
php+webSoket实现聊天室示例代码(附源码)
Feb 17 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
php解决crontab定时任务不能写入文件问题的方法分析
Sep 16 PHP
Laravel修改验证提示信息为中文的示例
Oct 23 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
Discuz 模板引擎的封装类代码
2008/07/18 PHP
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
php经典趣味算法实例代码
2020/01/21 PHP
JavaScript学习笔记(十)
2010/01/17 Javascript
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
angular中使用路由和$location切换视图
2015/01/23 Javascript
jquery实现点击展开列表同时隐藏其他列表
2015/08/10 Javascript
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
Vue源码解读之Component组件注册的实现
2018/08/24 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
微信小程序在ios下Echarts图表不能滑动的问题解决
2019/07/10 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
详解Vue.js 可拖放文本框组件的使用
2021/03/03 Vue.js
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
Python基础学习之时间转换函数用法详解
2019/06/18 Python
python多进程下实现日志记录按时间分割
2019/07/22 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
简单总结CSS3中视窗单位Viewport的常见用法
2016/02/04 HTML / CSS
《湘夫人》教学反思
2014/02/21 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
交通事故一次性赔偿协议书范本
2014/11/02 职场文书
北京天坛导游词
2015/02/12 职场文书
人工作失职检讨书
2015/05/05 职场文书
总经理年会致辞
2015/07/29 职场文书
闭幕词的写作格式与范文!
2019/06/24 职场文书
python自动化之如何利用allure生成测试报告
2021/05/02 Python