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 以表明它已失败。
我的 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 以表明它已失败。