PHP超全局数组转全局变量:配置查询与修改方法咨询
关于PHP超全局数组元素自动转为全局变量的配置问题
这个问题其实是PHP里一个非常古老但曾经很常见的配置项在搞鬼——register_globals,它就是控制$_SESSION、$_POST这类超全局数组的元素能否直接作为全局变量使用的开关。
如何查询服务器的当前配置
- 方法一:创建一个简单的PHP脚本,内容如下:
运行这个脚本后,在页面里搜索<?php phpinfo(); ?>register_globals,就能看到它的当前值是On(开启)还是Off(关闭)。 - 方法二:在脚本里直接调用
ini_get()函数查看:
返回<?php echo ini_get('register_globals'); ?>1表示开启,返回0表示关闭;如果返回空值,说明你的PHP版本已经移除了这个配置(PHP 5.4.0及以后版本彻底删除了register_globals)。
如何修改这个行为
1. 修改php.ini配置文件(推荐方式)
找到服务器上的php.ini文件,定位到register_globals这一行:
- 如果要开启这个行为,改成:
register_globals = On - 如果要关闭(强烈推荐,因为这个配置存在严重安全隐患),改成:
register_globals = Off
修改完成后,需要重启你的Web服务器(比如Apache、Nginx+PHP-FPM)才能生效。
2. 使用.htaccess文件(仅Apache环境适用)
如果没有权限修改php.ini,可以在网站根目录创建或修改.htaccess文件,添加以下内容:
- 关闭:
php_flag register_globals off - 开启:
php_flag register_globals on
3. 脚本内临时设置(局限性大)
可以在PHP脚本的最开头添加:
<?php ini_set('register_globals', 0); // 关闭 ?>
不过要注意:register_globals属于PHP_INI_PERDIR级别的配置,部分服务器环境可能限制通过ini_set()修改它,所以这个方法不一定能生效,仅作为临时方案。
额外提醒:
register_globals在PHP 5.3.0就被标记为废弃,PHP 5.4.0直接被移除了。如果你的其中一台服务器是PHP 5.4及以上版本,那根本不存在这个配置,自然不会有超全局数组转全局变量的行为,这也是两台服务器表现不同的常见原因。
内容的提问来源于stack exchange,提问作者rtdrury
相关产品推荐
相关产品推荐

