wie bekomme ich die Ausgabe von Prozess geöffnet durch popen in PHP?

8

Datei a.php:

%Vor%

Datei b.php:

%Vor%

Frage:

Ich kann das Echo-Ergebnis auf der Konsole nicht sehen; warum und wie man es sieht?

Ich möchte das nicht in der Datei b.php machen: echo stream_get_contents($h);

    
argb 13.04.2013, 13:35
quelle

2 Antworten

7

Überprüfen Sie das zweite Beispiel in der Dokumentation zu popen , es zeigt genau, wie Sie das tun:

%Vor%

Dieser Ausschnitt liest von stderr. Entfernen Sie die Pipe, um von stdout zu lesen.

    
alexn 13.04.2013 13:38
quelle
3

Sie können das Echo-Ergebnis auf der Konsole nicht sehen, weil es nie zur Konsole gegangen ist. Durch Öffnen des Prozesses im Lesemodus wurde sein STDOUT mit dem Dateihandle des offenen Prozesses verknüpft. Die Ausgabe würde nur dann zur Konsole gelangen, wenn Sie von diesem Datei-Handle lesen und dann wiederholen.

Mit anderen Worten, der Fluss ist das.

  • b.php beginnt zu laufen - seine STDIN und STDOPUT sind wie üblich mit Ihrer Konsole verbunden
  • ruft popen im Lesemodus auf und speichert die Stream-Ressource in $ h
  • Dies bewirkt, dass a.php gestartet wird, wobei STDOUT mit dem Dateideskriptor in $ h verknüpft ist und STDIN nicht mit irgendwas
  • verknüpft ist
  • Das bedeutet, Sie sehen, dass a.php keinen direkten Zugriff auf die Konsole hat, von der b.php gestartet wurde
  • a.php schreibt seine Ausgabe in diesen Stream und beendet dann die Ausführung von
  • b.php macht nie etwas mit dem Stream in $ h, es schließt nur, so dass die Ausgabe von a.php verloren geht.

Ich hoffe, das erklärt, was hier vor sich geht. Wenn Sie die Ausgabe von a.php auf der Konsole sehen wollen, dann muss b.php es aus dem Stream in $ h lesen und dann zurückgeben, da nur b.php Zugriff auf die Konsole hat.

Wenn Sie stattdessen system () anstelle von popen () verwenden, wird die Ausgabe automatisch auf der Konsole des aufrufenden Skripts ausgegeben, da system () die STDIN und STOUT des Hauptskripts an das aufgerufene Programm oder Skript übergibt .

    
A guest PHP coder 22.08.2014 01:30
quelle

Tags und Links