我正在开发一个使用register_globals
的框架。我的本地php版本是5.4。
我知道自PHP 5.3.0以来已弃用register_globals
并在PHP 5.4中删除,但我必须使此代码在PHP 5.4上运行。
有没有办法在较新版本的PHP上模拟功能?
答案 0 :(得分:25)
您可以在全局extract中使用scope模仿register_globals
:
extract($_REQUEST);
或者使用全局和variable variables
将其置于独立功能function globaling()
{
foreach ($_REQUEST as $key => $val)
{
global ${$key};
${$key} = $val;
}
}
如果您有已发布的应用程序并且不想更改其中的任何内容,则可以使用
创建globals.php
文件
<?php
extract($_REQUEST);
然后将auto_prepend_file指令添加到.htaccess(或在php.ini中)
php_value auto_prepend_file ./globals.php
在此之后,代码将在每次调用时运行,应用程序将像旧设置生效一样工作。
答案 1 :(得分:7)
以防它可能有用,这是在php.net上建议的代码,以模拟 register_globals On :
<?php
// Emulate register_globals on
if (!ini_get('register_globals')) {
$superglobals = array($_SERVER, $_ENV,
$_FILES, $_COOKIE, $_POST, $_GET);
if (isset($_SESSION)) {
array_unshift($superglobals, $_SESSION);
}
foreach ($superglobals as $superglobal) {
extract($superglobal, EXTR_SKIP);
}
}
来源:http://php.net/manual/en/faq.misc.php#faq.misc.registerglobals
答案 2 :(得分:5)
来自PHP manual,它说:
自PHP 5.3.0开始,此功能已被弃用,自PHP 5.4.0起已被删除。
但是,Google搜索在Ubuntu Forums上显示了此方法:
不,它终于好转了。无论哪个站点仍在使用全局变量 有什么,现在,半年或更长时间来修复代码?
最快的解决方案是通过运行从头开始创建全局变量 这个代码在应用程序的开头:
代码:
foreach ($_REQUEST as $key=>$val) {
${$key}=$val;
}
您必须要小心,在此脚本的其余部分中尚未定义以这种方式创建的任何变量。
您可以强制此代码在网站上的每个页面之前运行 在.htaccess文件中使用auto_prepend_file指令。
我强烈建议您查看需要register_globals
的代码并进行更改,以便在禁用时正常运行。
答案 3 :(得分:0)
在php.ini之前:
auto_globals_jit = On
后:
auto_globals_jit = Off