你好,我想使用 PHP exec() 函数调用 java,但是失败了(没有输出例如exec('/usr/bin/java -version')
。
我在 debian wheezy 上以 Fast-CGI (带有 fcgid) 形式运行 apache 和 PHP。
java 二进制文件在 /usr/bin/java 下可用,可以从命令行调用,例如“/usr/bin/java -version”返回预期信息。
在 apache/suexec 用户上下文中调用此功能也可以从命令行(sudo -u www-data /usr/bin/java -version)运行。
但是从 PHP 调用exec()
或检查is_executable('/usr/bin/java')
不起作用。
我错过了什么?
答案1
我将在这里回答我自己的问题。事实证明,有两个不同的问题。
1) 首先是微不足道的,我忘记了open_basedir
未包含/usr/bin
目录的活动设置。但无论如何,即使包含它之后,/usr/bin/java
根据 PHP 仍然无法执行is_executable()
。所以我不得不禁用此功能,但对于我本地 DEV 服务器来说,这并不重要。也许有人知道如何使用open_basedir
set 使其可执行。
2)第二个问题很奇怪但却是事实:-)由于某些奇怪的原因,“java -version”的调用没有写入STDOUT而是写入STDERR,因此PHPsexec()
无法提供输出。