与$_SESSION的key值同名的变量会覆盖$_SESSION中key的值
有一次给客户做项目的时候发现与$_SESSION的key值同名的变量会覆盖$_SESSION中key的值。
例如:前一个页面$_SESSION[‘aaa’]=’bbb’;
然后声明变量$aaa=’ccc’;再打印$_SESSION[‘aaa’]的时候就变成了ccc。
后来查了一下谷歌,发现PHP配置register_globals = On的时候,定义的变量会改变同名的SESSION,改成 register_globals = Off即可。
我们来调试一下register_globals到底有什么用呢。
首先我们写出一段代码:
1 2 3 4 5 6 7 8 9 10 | <form action='' method='get'> <input type='text' name='username' value='aimks' /> <input type='submit' name='password' value='888'/> </form> < ?php echo 'username::',$username; echo '<br>sub::',$sub; echo '<br />GET::'; print_r($_GET); ?> |
当register_globals = On的时候,程序运行提交输出结果为:
username::aimks
sub::888
array ( [username] => aimks [sub] => 888 )
当register_globals = Off的时候,程序运行提交输出结果为:
username::
sub::
array ( [username] => aimks [sub] => 888 )
通过测试结果,显而易见:register_globals的意思就是注册为全局变量,所以当On的时候,传递过来的值会被直接的注册为全局变量直接使用,而Off的时候,我们需要到特定的数组里去得到它。
经过测试,$_SERVER,$_ENV,$_FILES,$_COOKIE,$_POST,$_GET这些变量数组,全部会跟单独的变量重名出错,所以,我们有时候出错的时候可以改这个变量register_globals。
IE下radio/checkbox的change事件失效的解决办法 php根据某年某月获取该月天数的三种方法