0

我在我的 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 的值为空,则此代码可以正常工作。这是预期的行为还是我做错了什么?

4

1 回答 1

3

open_basedir不能在运行时通过任意ini_set()设置,只能收紧到较低的目录

从 PHP 5.3.0 开始,open_basedir 可以在运行时收紧。这意味着如果在 php.ini 中将 open_basedir 设置为 /www/,则脚本可以在运行时使用 ini_set() 将配置收紧到 /www/tmp/。列出多个目录时,您可以使用 PATH_SEPARATOR 常量作为分隔符,而不管操作系统如何。

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

于 2017-06-30T20:17:21.003 回答