2010-09-24 10 views
9

mi piacerebbe eseguire qualcosa di simile (in myProgram.sh):Come eseguire il programma Java e ottenere l'output in PHP?

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

all'interno di PHP e leggere l'output.

Finora ho qualcosa di simile:

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

Ma quello che mi piacerebbe davvero è quello di essere in grado di ottenere l'output del programma Java nello script PHP e non solo eseguirlo come un altro thread.

Come si può fare?

+0

Sembra che il problema è che i percorsi di classe dovevano essere assoluto, relativo, anche se accurato, fallito. Presenterò la risposta il prima possibile. –

risposta

0

La chiave è che i percorsi di classe devono essere assoluta all'interno dello script PHP shell_exec.

O almeno questo è l'unico modo per farlo funzionare correttamente. Fondamentalmente è quasi impossibile dire dall'ambiente all'ambiente quale sia la directory relativa in cui lo script php sta eseguendo la JVM.

Così, ha contribuito a mettere la posizione del percorso assoluto per Java, come ad esempio usr /.../ bin/java

7

Si può fare questo:

exec($processOrderCommand, $output); 

Dalla documentazione:

Se l'argomento output è presente, allora la matrice specificata sarà riempito con ogni linea del output del comando. Gli spazi vuoti finali, come \ n, non sono inclusi in questo array. Si noti che se l'array contiene già alcuni elementi, exec() si aggiungerà alla fine dell'array. Se non si desidera che la funzione aggiunga elementi, chiamare unset() sull'array prima di passarlo a exec().

Per un migliore controllo sulla tua esecuzione si può dare un'occhiata a proc_open()


Risorse:

+0

Sfortunatamente questo non funziona con l'output Java. Anche solo l'esecuzione di java -version restituisce una matrice vuota. –

+2

@Stephane Grenier perché l'output di '-version' si trova nel flusso di errori;) –

+0

@Colin: ho appena eseguito exec ('java -cp hardcodedPath/TestOutput.jar com.my.TestProgram hello', $ output); Il risultato è stato un array vuoto. Nel programma, faccio solo un System.out.println (args [0]) // ie. Ciao. Eventuali suggerimenti? –

Problemi correlati