2012-02-27 19 views
5

Estoy intentando ejecutar un programa Java para firmar un archivo PDF con la función php exec pero que no funciona:no puede ejecutar el programa Java con la función php exec

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

Cuando ejecuto, la $ salida es una matriz vacía y $ retorno es un entero (1), pero si me quedo:

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

En la línea de comandos funciona. ¿Alguien puede ayudarme?

Gracias.

+3

¿Funciona si suministrar la ruta completa al binario de java? Por ejemplo '/ usr/bin/java'. Usa 'which java' para encontrar la ruta al binario. – Treffynnon

+1

Además del comentario de @Treffynoon, es posible que también deba especificar la ruta completa a sus archivos PROGRAM.jar, ORIGIN.pdf y DESTINY.pdf –

+0

Solo uso la ruta completa para los archivos y el comando y no funciona. – josebailo

Respuesta

1

Finalmente pude resolver el problema.

La solución es:

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

Añadiendo la opción -Djava.awt.headless=true estás contando java que se trata de una llamada indirecta por lo que no tiene control sobre el teclado, el ratón, etc.

+0

hola esto no funciona para mí, probé el código anterior, todavía estoy recibiendo una matriz vacía para el resultado –

3

@Treffynnon tiene razón. La diferencia entre ejecutar el programa desde el símbolo del sistema y desde otro programa son las variables de entorno y los permisos.

Por lo tanto, primero compruebe si el usuario que ejecuta su servidor donde se ejecuta PHP tiene permisos para ejecutar la aplicación y acceder a los archivos apropiados.

a continuación, compruebe la ruta de acceso a

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

Probablemente debería modificar la ruta especifica, es decir, mejor ya sea usando notación relativa o absoluta. Es porque el directorio de trabajo actual puede ser diferente en 2 casos.

Buena suerte.

2

Casi con certeza PHP no sabrá la ruta de "java". Si está en Linux, ejecute "which java" y coloque toda la ruta java que recibe en la llamada del ejecutivo, p.

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