不要责骂我,因为我在搜索答案时当然发现了关于这个主题的多个主题。尽管如此,我的问题似乎有所不同,因为我在 exec() 调用中根本没有得到任何响应。以下是一些信息:
- 我在 Apache 2.2.22 上运行 PHP 5.4.7 的 MacOS 上,并尝试从 Java 1.6.0_35 运行 jar 文件。
- 我可以执行简单的命令,如“ls -l”、“which java”或“pwd”,但是任何尝试调用 java - 甚至“/usr/bin/java -version”都会失败而没有任何响应;PHP 脚本在 exec() 调用后停止丢弃任何其他命令
- 我没有得到任何输出,既不是来自脚本本身,也不是任何错误日志。
- 我以任何可能的方式尝试了 exec、shell_exec、system,但没有成功。
- 我确保 Java 调用的每一部分,包括二进制文件、jar 文件等都存在,可以通过绝对路径访问;而且,当然,该命令在命令行上运行没有任何问题
- 调用本身看起来像这样 '/usr/bin/java -Djava.awt.headless=true -jar /Users/twolff/Projects//bin/java/net.adternity.utils.xml2xls/dist/net.adternity.utils .xml2xls.jar --input="/private/tmp/report_rUEsDe.xml" --output="/private/tmp/report_7o1lFb.xls"'。
- 我检查了 PHP 配置,但看不到任何错误(例如 disable_functions、safe_mode 等)
- 我没有使用 DYLIB 环境变量问题运行 MAMP
我现在迷路了,在哪里继续我的调查,如果有人能帮助我,我会很高兴。这是我在测试脚本中运行的代码:
try {
$output = "";
$return_val = 0;
echo exec('/usr/bin/java -Djava.awt.headless=true -jar /Users/twolff/Projects/<project_name>/bin/java/net.adternity.utils.xml2xls/dist/net.adternity.utils.xml2xls.jar --input="/private/tmp/report_rUEsDe.xml" --output="/private/tmp/report_7o1lFb.xls"', $output, $return_val);
echo "<br/>";
echo serialize($output);
echo "<br/>";
echo $return_val;
echo "<br/>";
} catch(Exception $e) {
echo $e->getMessage();
echo "<br/>";
}
echo "DONE";
同样,如果我只使用“which java”(或除 Java 本身之外的任何其他内容),我会得到如下输出:
/usr/bin/java
a:1:{i:0;s:13:"/usr/bin/java";}
0
DONE
尝试运行 Java 应用程序不会返回任何内容,浏览器什么也不做。没有输出,没有错误日志。
感谢您查看这个。
托拜厄斯。