我正在尝试使用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
在命令行中它可以工作。任何人都可以帮助我吗?
谢谢。
答案 0 :(得分:3)
@Treffynnon是对的。从命令提示符和其他程序执行程序之间的区别是环境变量和权限。
因此,首先检查运行运行PHP的服务器的用户是否有权运行应用程序并访问相应的文件。
然后验证
的路径您应该修改路径,即使用相对或绝对符号更好地指定它。这是因为目前的工作目录在两种情况下可能不同。
祝你好运。答案 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它是间接调用,因此它无法控制键盘,鼠标等。