PHP ini_set open_basedir 没有效果

PHP ini_set open_basedir has no effect

我的 Ubuntu + PHP 7.0.18 + Apache2 遇到了这个问题: 在我的 php.ini 中设置了 open_basedir = /var/www:/tmp。它工作正常。 但是在一个网络应用程序中,我需要使用另一个目录来处理。 我试图通过 ini_set:

来设置它
ini_set(
    'open_basedir',
    implode(
        PATH_SEPARATOR,
        array(
            __DIR__,
            '/media/hdd/backup/db'
        )
    )
);

但是没有任何效果:

echo ini_get('open_basedir'); // shows /var/www:/tmp

如果 php.ini 中 open_basedir 的值为空,则此代码可以正常工作。 这是预期的行为还是我做错了什么?

open_basedir不能在运行时通过ini_set()任意设置,只能是tightened to a lower dir:

As of PHP 5.3.0 open_basedir can be tightened at run-time. This means that if open_basedir is set to /www/ in php.ini a script can tighten the configuration to /www/tmp/ at run-time with ini_set(). When listing several directories, you can use the PATH_SEPARATOR constant as a separator regardless of the operating system.

您对 ini_set() 的调用应该返回 false 以表明它已失败。