很久以前的 PHP 默认开启 Register Globals 选项, 这样写程式就很方便, 但这个方便也带来安全性问题, 所以后来 PHP 默认会将 Register Globals 关闭, 对于一些要开启 Register Globals 的程式, 在不修改程式码的情况下, 还可以透过修改 php.ini 或 .htaccess 的方法解决。
但在 PHP 5.4 开始, PHP 开发团队将 Register Globals 删除, 所以很多要靠开启 Register Globals 才能执行的程式, 在 PHP 5.4 或以后的版本便失效了, 我知道有些主机是为了让旧 PHP 程式执行, 会不顾安全风险, 编译旧版的 PHP 使用。
当然最好的方法还是修改旧有 PHP 程式码, 不用靠 Register Globals 也能执行, 但修改程式码也要花一点时间, 以下分享一个不用修改程式码的解决方法, 对需要在短时间解决 Register Globals 问题是很好的临时方案。
先在网页目录建立一个 PHP 档案, 以下取名为 globals.php, 加入以下内容:
|
1 2 3 4 5 |
<?php foreach ($_REQUEST as $key => $val) { ${$key} = $val; } ?> |
然后建立 .htaccess 档案, 如果而经有 .htaccess, 可以直接开启, 加入以下内容:
|
1 |
php_value auto_prepend_file ./globals.php |
以上 .htaccess 的设定, 看到设定了 PHP 的 auto_prepend_file 选项, 指定网页目录下所以 PHP 程式在执行时, 会先加载 globals.php 档案, 效果等同在每个 PHP 档案加入一句 include ‘globals.php’ 一样。
然后该目录下的档案便可以使用 Register Globals 的方法使用变量。