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

我正在尝试使用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 

在命令行中它可以工作。 谁能帮我?

谢谢。

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

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

然后validation路径

  1. java的
  2. PROGRAM.jar
  3. ORIGIN.pdf
  4. DESTINY.pdf

您应该修改路径,即使用相对或绝对符号更好地指定它。 这是因为当前的工作目录在两种情况下可能不同。

祝你好运。

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

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

最后我可以解决这个问题。

解决方案是:

 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它是间接调用,因此它无法控制键盘,鼠标等。