【问题标题】:PHP ini_set open_basedir has no effectPHP ini_set open_basedir 没有效果
【发布时间】:2017-06-30 20:01:58
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-17
      • 2012-06-10
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 2016-06-21
      相关资源
      最近更新 更多