使用PHP [PATH]部分配置时,disable_functions本地值被忽略

时间:2013-06-25 18:50:21

标签: php apache

我遇到了PHP disable_functions的问题。在运行suPHP FastCGI PHP>的Apache服务器中5.3.0我正在尝试为每个虚拟主机设置disable_functions值。为此,我正在做的是在suPHP配置中禁用suPHP_ConfigPath禁止用户使用自己的php.ini文件。然后在全局php.ini文件中,我使用php sections [PATH]指令在特定的虚拟主机上配置自定义disable_functions。类似的东西:

php.ini文件

...
disable_functions = shell_exec, exec

[PATH=/home/someuser/public_html]
disable_functions =
...

如果我使用phpinfo文件检查该虚拟主机中的php配置,我会得到正确的预期值。 Disable_functions指令具有本地值=无值和主值= shell_exec,exec。但是,如果我运行使用shell_exec的测试脚本,服务器会阻止它显示一个错误,指出出于安全原因已禁用shell_exec。这意味着PHP忽略了disable_functions本地值并改为使用主值。

我无法弄清楚为什么它不能像[PATH]那样工作[HOST] PHP部分文档应该可以在这些部分配置禁用功能。只有扩展名和zend_extension指令不应在文档中的部分中使用。

我已经测试了其他指令PHP_INI_SYSTEM甚至是一个php.ini only指令(expose_php),并且所有指令都按预期工作。所以我完全迷失了,我无法理解发生了什么。

为了完整起见,我在运行FastCGI + SuExec PHP>的Apache服务器中进行了测试。 5.3.0(与suPHP类似的配置但不完全相同)和同样的事情发生,disable_functions本地值被忽略。

任何人都知道为什么这不起作用?这是一个PHP错误吗?有什么我没有考虑到的吗?

1 个答案:

答案 0 :(得分:2)

disable_functions 只能在主 php.ini 中设置clearly stated in PHP Manual。可以设置本地值并使用phpinfo()显示,但似乎没有任何影响(至少在PHP 5.5上)。

要解决这个问题,我使用per-vhost auto_prepend_file (或者使用per-vhost子包含一个全局)。该脚本包括调用uopz_delete()。如果您的PHP版本或操作系统等没有uopz PECL扩展名,您可以尝试其他扩展程序,例如APDrunkit,因为它们具有类似的功能来删除/隐藏其他PHP功能

uopz的解决方案已经在运行Ubuntu和PHP 5.5.9的一些生产服务器上进行了测试。它似乎不会严重影响性能,也不会导致任何不稳定。