Can't execute java program with php exec funct

2020-07-13 09:04发布

问题:

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.

回答1:

@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.



回答2:

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);


回答3:

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.



标签: java php exec