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