PHP register_globals On、Off 的区别

| 选择喜欢的代码风格  

register_globals 的值可以设置为:On 或者 Off,我们举一段代码来分别描述它们的不同。

<form action='' method='get'>
<input type='text' name='username' value='alex'>
<input type='submit' name='sub' value='sub'>
</form>
<?php
echo 'username::',$username;
echo '<br>sub::',$sub;
echo '<br>GET::';
print_r($_GET);
?>

register_globals = On 的时候,程序运行提交输出结果为:

username::alex
sub::sub
array ( [username] => alex [sub] => sub )   

register_globals = Off 的时候,程序运行提交输出结果为:

username::       
sub::
array ( [username] => alex [sub] => sub )  

显而易见:register_globals 的意思就是注册为全局变量,所以当On的时候,传递过来的值会被直接的注册为全局变量直接使用,而Off的时候,我们需要到特定的数组里去得到它。

为什么推荐 register_globals = Off?


PHP 4.2.0 版开始配置文件中 register_globals 的默认值从 on 改为 off 了,虽然你可以设置它为On,但是当你无法控制服务器的时候,你的代码的兼容性就成为一个大问题,所以,你最好从现在就开始用Off的风格开始编程。

当 register_globals 打开以后,各种变量都被注入代码,例如来自 HTML 表单的请求变量。再加上 PHP 在使用变量之前是无需进行初始化的,这就使得更容易写出不安全的代码。当打开时,人们使用变量时确实不知道变量是哪里来的,只能想当然。处于安全考虑,今后务必设置为 Off!



发表评论