PHP ini_set open_basedir无效

时间:2017-06-30 20:01:59

标签: php php-ini open-basedir ini-set

我在Ubuntu + PHP 7.0.18 + Apache2上遇到了这个问题: 在我的php.ini中设置open_basedir = / var / www:/ tmp。它工作正常。 但在一个网络应用程序中,我需要使用另一个dirs来处理。 我试图通过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值为空,则此代码可以正常工作。 这是预期的行为还是我做错了什么?

1 个答案:

答案 0 :(得分:3)

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

  

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

您对ini_set()的来电应该返回false表示它已失败。