PHP exec() funktioniert nicht richtig

Ich habe Schwierigkeiten mit der PHP exec() Funktion. Es scheint nicht aufrufen bestimmter Funktionen. Zum Beispiel, der code echo exec('ls'); erzeugt keine Ausgabe überhaupt (es sollte, gibt es Dateien im Verzeichnis). Haupt-Grund dafür ist ein problem für mich ist, dass ich versuche ausführen .jar aus einem PHP-exec () - Aufruf.

Soweit ich weiß, ich bin Aufruf des java-Programms richtig, aber ich bekomme keine der Ausgabe. Die .jar ausgeführt werden können von der Kommandozeile auf dem server. (Für das Protokoll, es ist ein apache-server).

Meine php für den .jar ausführen sieht so aus:

$output = array();
exec('java -jar testJava.jar', $output);
print_r($output);

Alles, was ich bekommen für die Ausgabe aus dieser exec () - Aufruf ist Array().

Ich habe Erfolg mit exec() ausführen 'whoami' und 'pwd'. Ich kann nicht herausfinden, warum einige Funktionen arbeiten und einige sind nicht. Ich bin nicht die erfahrenste person mit PHP entweder, so bin ich mir auch nicht sicher, wie Sie das Problem zu diagnostizieren. Jegliche Hilfe würde geschätzt werden.

  • Was ist der genaue Fehler? Und auch, möchten Sie vielleicht so etwas wie dieses: new BufferedWriter(new FileWriter(new File("out.txt")));
  • Der Fehler ist eigentlich eine FileNotFoundException für out.txt . Mein Verständnis ist, dass die Datei nicht erstellt wird, ist also, warum es nicht gefunden wird.
  • Möglicherweise müssen Sie auch ändern Sie die Berechtigungen des Verzeichnisses, in das Glas zu schreiben versucht die Datei zu. Nicht nur die Berechtigungen der jar-Datei selbst.
  • Ja, wie es scheint. Sie könnten auch versuchen, wickeln Sie es um mit einer Datei.
  • Hey, das funktioniert jetzt .jar ausgeführt von der Kommandozeile kein problem. Ich werde versuchen, es in PHP jetzt und aktualisieren Sie meine Frage.
  • Haben Sie das problem gelöst? Ich bin daran interessiert, wo Sie eigentlich falsch gelaufen ist.
  • Habe ich nicht. Ich habe weiterhin meine Suche im internet, aber ich habe nicht gefunden was. Es ist ziemlich frustrierend, vor allem, weil ich gefunden habe, eine Reihe von Beispielen, wo Leute scheinen zu haben der gleiche code, die ich tun, außer dass es für Sie funktioniert.
  • Haben Sie erfolgreich verengt Sie sich überhaupt? Ist die jar-Datei, die definitiv nicht laufen? Ist PHP nicht richtig abfangen die Ausgabe des Programms? Wenn die jar-Datei wird nicht ausgeführt, ich würde auf jeden Fall vermuten, es zu sein, Berechtigungen Fehler irgendwo. Ich definitiv nicht glaube, dein problem ist etwas klar. Sie sollten denken, außerhalb der box ein wenig; vielleicht versuchen Sie geben den vollständigen Pfad zu der jar-Datei? Vielleicht aktualisieren Sie Ihren Beitrag mit ein bisschen mehr code und beschreiben, was Sie versucht haben, geben Sie, oder einer von uns, ein eureka moment.
  • Ich denke, dass, weil die out.txt Datei, die nicht zeigen, bis überhaupt PHP ist definitiv nicht Aufruf der .jar an alle, anstatt einfach nicht abfangen der Ausgabe. Wahrheit werden gesagt, ich bin nicht alle, die Erfahrung mit PHP/Appache-Server, also bin ich mit Mühe den kommenden up mit Möglichkeiten, um zu versuchen und zu diagnostizieren das Problem. In Bezug auf herauszufinden, was hier passiert, ich weiß wirklich nicht einmal wissen, wo zu beginnen.
  • Ich muss Fragen; Sie nahm ikjoel Vorschlag der änderung der BufferedWriter-Zeile zu new BufferedWriter(new FileWriter(new File("out.txt"))); Recht? weil sonst java würde das nicht schaffen out.txt Datei. Vielleicht sollte man auch ein System haben.aus.println("Hallo!"); in Ihrer jar-Datei, so dass der Ausgang wäre möglicherweise geschrieben $output array beim ausführen von php. Der code, den Sie geschrieben sein sollte zu arbeiten - oder zumindest das ausführen der jar-Datei, die - abgesehen von einem Fehler nichts mit dem code selbst. Keep that in mind! Pfade, Berechtigungen, etc.!
  • Ich habe nicht den code gerne. Ich werde zu aktualisieren, die ursprüngliche Frage mit dem neuen testJava code, obwohl es nicht wirklich anders. Es hat einen BufferedWriter, und ein einfaches System.aus.println-Zeile. Soweit Berechtigungen, testJava.jar Universelle lese - /Programm-Zugriff und der apache seinen Besitzer. Ich habe nicht den vollständigen Pfad, weil ich nicht denke, PHP ist der Aufruf der "java" - Befehl an alle - ich habe versucht exec('java -jar x'), um zu sehen, ob ich bekommen würde, die entsprechende Fehlermeldung, aber ich habe nichts, also wie ich sagte, ich bin mir ziemlich sicher, dass es nur nicht aufrufen java richtig.
  • Wild guess: java ist nicht in Ihrem Pfad....
  • Nein, es ist - das Problem war SELinux, es war die Blockierung von PHP aus aufrufen von java.

InformationsquelleAutor MattS | 2012-06-21
Schreibe einen Kommentar