2010-09-24 18 views
9

me gustaría correr algo así como (en myProgram.sh):¿Cómo ejecutar el programa Java y obtener resultados en PHP?

java -cp whatever.jar com.my.program $1 

dentro de PHP y leer la salida.

hasta ahora tengo algo como:

$processOrderCommand = 'bash -c "exec nohup setsid /myProgram.sh ' . $arg1 . ' > /dev/null 2>&1 &"'; 
exec($processOrderCommand); 

Pero lo que realmente me gustaría es ser capaz de obtener la salida del programa Java en el script PHP y no solamente ejecuta como otro hilo.

¿Cómo se puede hacer esto?

+0

Parece que el problema es que las rutas de clases tuvieron que ser absoluta, relativa, incluso si exacto, fallido Estaré publicando la respuesta tan pronto como pueda. –

Respuesta

0

La clave es que los classpaths deben ser absolutos dentro del script shell_exec PHP.

O al menos esa es la única forma en que podría hacer que funcione correctamente. Básicamente es casi imposible decir de entorno a entorno lo que el directorio relativo es que el script php está ejecutando la JVM.

A su vez, ayudó a poner la ubicación de la ruta absoluta para Java, tales como usr /.../ bin/java

7

Usted puede hacer esto:

exec($processOrderCommand, $output); 

De la documentación:

Si el argumento output está presente, entonces la matriz especificada se llenará de cada línea de salida del comando. El espacio en blanco posterior, como \ n, no está incluido en esta matriz. Tenga en cuenta que si la matriz ya contiene algunos elementos, se agregará exec() al final de la matriz. Si no desea que la función agregue elementos, llame al unset() en la matriz antes de pasarla al exec().

Para un mejor control de su ejecución se puede echar un vistazo a proc_open()


Recursos:

+0

Desafortunadamente, esto no funciona con la salida de Java. Incluso el solo hecho de ejecutar java -version devuelve una matriz vacía. –

+2

@Stephane Grenier eso es porque la salida de '-version' está en la secuencia de error;) –

+0

@Colin: Acabo de ejecutar exec ('java -cp hardcodedPath/TestOutput.jar com.my.TestProgram hello', $ output); El resultado fue una matriz vacía. En el programa, solo hago un System.out.println (args [0]) // ie. Hola. ¿Alguna sugerencia? –

Cuestiones relacionadas