动态更改PHP配置

时间:2014-08-14 14:11:26

标签: php configuration register-globals

我在PHP 5.3上运行了多个系统,这些系统已经运行了15到10年,我无法继续使用这些系统并进行任何更改。

问题是:其中一些系统正在使用PHP register_globals = on,它在PHP 5.3上已经过折旧,甚至在PHP 5.4(http://php.net/manual/en/security.globals.php)中也不存在。

我正在开发一个新系统并且想要转换PHP register_globals = off但我不能,因为所有那些需要它的旧系统。

所以我考虑使用register_globals在我的脚本中动态更改offstring ini_set ( string $varname , string $newvalue ),但文档(http://php.net/manual/en/function.ini-set.php)让我感到困惑:

设置给定配置选项的值。配置选项将在脚本执行期间保留此新值,并将在脚本结束时恢复。

这是否意味着,如果我同时运行两个脚本,请说...我真正需要register_globals = on的旧系统和使用ini_set() {{1}的新系统旧脚本将使用新更改的设置运行?或者它会保留我的PHP.ini文件中的设置,新系统将在register_globals = off配置上运行吗?

- 编辑 -

经过一些测试(见下面的代码)@Jacob是对的,似乎PHP为每个脚本创建了一个上下文,而ini_set()只改变了脚本的配置。

TestWithIni_Set.php

ini_set()

TestWithoutIni_Set.php

<?php
ini_set('register_globals', '0');

$i = 0;
while(true)
{
    if($i == 0)
    {
        phpinfo();
    }
    $i++;
}
?>

所以我首先运行了<?php phpinfo(); ?> ,然后TestWithIni_Set.php正在执行(无限循环)我运行了TestWithIni_Set.php

不幸的是,我发现我无法使用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的值?

1 个答案:

答案 0 :(得分:0)

我在我的新系统目录中添加了.user.ini文件,唯一的一行是register_globals=off

我还在PHP.ini文件中取消注释以下行:

user_ini.filename = ".user.ini"

我还确保只有本地用户才有权对该目录进行更改。因此,有人无法在此目录中为我的服务器上传新的用户定义.ini文件。

例如:IIS用户只能读取此目录中的文件,无法添加/修改/删除任何文件。