用php exec函数无法执行java程序

时间:2012-02-27 15:36:16

标签: java php exec

我正在尝试使用php exec函数执行java程序来签署pdf文件但不起作用:

exec('java -jar PROGRAM.jar -n -t ORIGIN.pdf -o DESTINY.pdf -s CERTIFICATE -p PASSWORD', $output, $return);

当我执行它时,$ output是一个空数组,$ return是一个int(1),但是如果我运行:

java -jar PROGRAM.jar -n -t ORIGIN.pdf -o DESTINY.pdf -s CERTIFICATE -p PASSWORD

在命令行中它可以工作。任何人都可以帮助我吗?

谢谢。

3 个答案:

答案 0 :(得分:3)

@Treffynnon是对的。从命令提示符和其他程序执行程序之间的区别是环境变量和权限。

因此,首先检查运行运行PHP的服务器的用户是否有权运行应用程序并访问相应的文件。

然后验证

的路径
  1. 的java
  2. PROGRAM.jar
  3. ORIGIN.pdf
  4. DESTINY.pdf
  5. 您应该修改路径,即使用相对或绝对符号更好地指定它。这是因为目前的工作目录在两种情况下可能不同。

    祝你好运。

答案 1 :(得分:2)

几乎可以肯定,PHP不会知道“java”的路径。如果你在Linux中,运行“which java”并将你在exec调用中返回的整个java路径放入,例如。

exec( '/usr/bin/java -jar PROGRAM.jar -n -t ORIGIN.pdf -o DESTINY.pdf -s CERTIFICATE -p PASSWORD', $output, $return);

答案 2 :(得分:1)

最后我可以解决问题。

解决方案是:

exec('java -Djava.awt.headless=true -jar PROGRAM.jar -n -t ORIGIN.pdf -o DESTINY.pdf -s CERTIFICATE -p PASSWORD', $output, $return);

添加-Djava.awt.headless=true选项,告诉java它是间接调用,因此它无法控制键盘,鼠标等。