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.
@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
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.
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);
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With