我遇到了 PHP disable_functions 的问题。在运行 suPHP FastCGI PHP > 5.3.0 的 Apache 服务器中,我试图为每个虚拟主机设置 disable_functions 值。为此,我正在做的是在 suPHP 配置中禁用使用 suPHP_ConfigPath 来禁止用户使用他们自己的 php.ini 文件。然后在全局 php.ini 文件中,我使用 php 部分 [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 部分文档应该可以在这些部分上配置禁用功能。只有 extension 和 zend_extension 指令不应在文档部分使用。
我已经用其他指令 PHP_INI_SYSTEM 甚至是一个 php.ini 唯一指令(expose_php)进行了测试,并且都按预期工作。所以我完全迷失了,我无法理解发生了什么。
只是为了完整性,我在运行 FastCGI + SuExec PHP > 5.3.0(与 suPHP 的配置相似但不完全相同)的 Apache 服务器中进行了测试,并且发生了同样的事情,disable_functions 本地值被忽略。
任何人都知道为什么这不起作用的充分理由?它是一个PHP错误吗?有什么我没有考虑到的吗?