Lösung für das Problem, dass system() in PHP keine Ausgabe zurückgibt: Leiten Sie den Standardfehler auf die Standardausgabe um, indem Sie [2 >& 1] an den Befehl anhängen, zum Beispiel [exec('some_command --option 2> & 1',$output,$ret);].
Die Betriebsumgebung dieses Artikels: Windows 10-System, PHP 7, Thinkpad T480-Computer.
Kürzlich habe ich bei der Arbeit zufällig entdeckt, dass die Ausführung gängiger Befehle wie „ls“, exec() gut funktionieren kann, zum Beispiel:
exec('ls',$输出,$ retval); var_dump($ output,$ retval); // $ output包含文件名数组,retval === 0
Aber wenn ich versuche, ein anderes Programm auszuführen, kann ich die Ausgabe nicht erhalten , wie folgt:
exec('some_command --a_parameter',$ output ,$ retval); var_dump($ output,$ retval); // $ output包含一个空数组,结束$ retval === 0
Beim Ausführen des Befehls direkt über die Befehlszeile werden einige Zeilen gedruckt. Ich weiß, dass die Befehlsausführung erfolgreich war, und ich kann die Ergebnisse sehen (einige Dateiaktualisierungen, Datenhinzufügung usw.), aber Ich kann die Ausgabe nicht sehen.
Die Funktion exec() erfasst nur die Standardausgabe. Ich bin nicht sicher, ob der Standardfehler immer an das Apache-Fehlerprotokoll gesendet wird, aber es scheint möglich zu sein.
Wenn Sie kein Unix-System verwenden müssen, können wir den Standardfehler tatsächlich auf die Standardausgabe umleiten, indem wir 2>& 1 an den Befehl anhängen, sodass das Problem gelöst werden kann, zum Beispiel:
exec('some_command --option 2>& 1',$ output,$ ret);
Empfohlen Lernen: php Training
Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn system() in PHP keine Ausgabe zurückgibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!