2010-09-24 8 views
9

Ich möchte so etwas wie (in myProgram.sh) auszuführen:Wie Java-Programm ausführen und Ausgabe in PHP erhalten?

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

in PHP und die Ausgabe lesen.

Bisher habe ich so etwas wie:

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

Aber was ich möchte wirklich in der Lage sein, die Ausgabe des Java-Programms innerhalb des PHP-Skript zu bekommen und nicht nur führen Sie es als einen anderen Thread.

Wie kann das gemacht werden?

+0

Es sieht aus wie das Problem ist, dass die CLASSPATHs absolut, relativ sein musste, auch wenn genau, fehlgeschlagen. Ich werde die Antwort veröffentlichen, sobald ich kann. –

Antwort

0

Der Schlüssel ist, dass die Klassenpfade innerhalb des PHP-Skripts shell_exec absolut sein müssen.

Oder zumindest ist das der einzige Weg, wie ich es richtig arbeiten lassen könnte. Grundsätzlich ist es fast unmöglich, von Umgebung zu Umgebung zu unterscheiden, welches relative Verzeichnis das php-Skript ist, auf dem die JVM läuft.

Wie gut, es half den absoluten Pfad Standort für Java zu setzen, wie usr /.../ bin/java

7

Sie können dies tun:

exec($processOrderCommand, $output); 

Aus der Dokumentation:

Wenn das output Argument vorhanden ist, dann wird das angegebene Array wird mit jeder Zeile der Ausgabe des Befehls gefüllt werden. Nachgestellte Leerzeichen wie \ n sind nicht in diesem Array enthalten. Beachten Sie, dass, wenn das Array bereits einige Elemente enthält, exec() an das Ende des Arrays angehängt wird. Wenn die Funktion keine Elemente anhängen soll, rufen Sie unset() im Array auf, bevor Sie sie an exec() übergeben.

Für eine bessere Kontrolle über Ihre Ausführung Ihnen einen Blick auf proc_open()

nehmen

Ressourcen:

+0

Leider funktioniert das nicht mit Java-Ausgabe. Auch wenn Sie nur java -version ausführen, wird ein leeres Array zurückgegeben. –

+2

@Stephane Grenier das ist, weil die Ausgabe von "-version" auf den Fehler-Stream ist;) –

+0

@Colin: Ich habe gerade exec ausgeführt ('java -cp hardcodedPath/TestOutput.jar com.my.TestProgram hallo', $ output); Das Ergebnis war ein leeres Array. Im Programm mache ich einfach eine System.out.println (args [0]) // ie. Hallo. Irgendwelche Vorschläge? –

Verwandte Themen