我在 PHP 5.3 上运行了 15-10 年的多个系统,我无法继续这些系统并进行任何更改。
问题是:其中一些系统使用的 PHPregister_globals = on
在 PHP 5.3 上已经贬值,甚至在 PHP 5.4 中都不存在(http://php.net/manual/en/security.globals.php)。
我正在开发一个新系统,想转 PHPregister_globals = off
但我不能,因为所有那些需要它的旧系统。
所以我考虑在我的脚本中使用动态更改register_globals
to但是文档(http://php.net/manual/en/function.ini-set.php)让我有点困惑:off
string ini_set ( string $varname , string $newvalue )
设置给定配置选项的值。配置选项将在脚本执行期间保留此新值,并将在脚本结束时恢复。
这是否意味着如果我有两个脚本同时运行,让我们说......我的一个真正需要的旧系统register_globals = on
和我使用旧脚本的新系统将使用新ini_set()
更改register_globals = off
的设置运行?或者它会将设置保留在我的 PHP.ini 文件中,并且新系统将在ini_set()
配置上运行?
- 编辑 -
经过一些测试(见下面的代码)@Jacob 是正确的,似乎 PHP 为每个脚本创建了一个上下文,并且ini_set()
只更改了脚本的配置。
TestWithIni_Set.php
<?php
ini_set('register_globals', '0');
$i = 0;
while(true)
{
if($i == 0)
{
phpinfo();
}
$i++;
}
?>
TestWithoutIni_Set.php
<?php
phpinfo();
?>
所以我先跑了TestWithIni_Set.php
,然后将TestWithIni_Set.php
执行(无限的while循环)我跑了TestWithoutIni_Set.php
。
不幸的是,看起来我无法register_globals
用ini_set()
. 我尝试了以下方法:
//Knowing that ini_set() parameters are strings I tried those anyway.
ini_set('register_globals', '0');
ini_set('register_globals', 0);
ini_set('register_globals', 'off');
ini_set('register_globals', 'Off');
ini_set('register_globals', false);
ini_set('register_globals', 'false');
然后为了确保我的代码没有问题,我尝试了:
ini_set('log_errors', '0');
只是想看看它是否会起作用并且确实有效。然后log_errors
脚本ini_set()
的值是关闭的,log_errors
脚本的值ini_set()
是打开的。
但现在我有一个不同的问题。
register_globals
如果我不能使用 更改它,如何仅更改正在运行的脚本的值ini_set()
?