Can't execute java program with php exec funct

2020-07-13 09:01发布

I'm trying to execute a java program to sign a pdf file with php exec function but doesn't work:

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

When I execute it, the $output is an empty array and $return is an int(1), but if I run:

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

In command line it works. Can anyone help me?

Thank you.

标签: java php exec
3条回答
Bombasti
2楼-- · 2020-07-13 09:10

Finally I could resolve the problem.

The solution is:

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

Adding the -Djava.awt.headless=true option you're telling java that it's an indirect call so it hasn't control over keyboard, mouse, etc.

查看更多
够拽才男人
3楼-- · 2020-07-13 09:27

@Treffynnon is right. The difference between executing program from command prompt and from other program is environment variables and permissions.

So, first check whether user that runs your server where PHP is running has permissions to run the application and to access appropriate files.

Then verify the path to

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

You should probably modify the path, i.e. better specify it either using relative or absolute notation. It is because current working directory might be different in 2 cases.

Good luck.

查看更多
狗以群分
4楼-- · 2020-07-13 09:29

Almost certainly PHP won't know the path of "java". If you're in Linux, run "which java" and put the whole java path that you get back in the exec call, e.g.

exec( '/usr/bin/java -jar PROGRAM.jar -n -t ORIGIN.pdf -o DESTINY.pdf -s CERTIFICATE -p PASSWORD', $output, $return);
查看更多
登录 后发表回答