exec vs system vs passthru vs shell_exec

Übersicht

FunktionParameterRückgabewert
execstring $command,
[array &$output],
[int &$return_var]
string
passthrustring $command,
[int &$return_var]
void
shell_execstring $cmdstring
systemstring $command,
[int &$return_var]
string
FunktionDirekte AusgabeAusgabe als VariableExitcode als Variable
execneinarray (Parameter $output),
string (letzte Zeile)
ja (Parameter return_var)&$
systemja (text)string (letzte Zeile)ja
shell_execneinstring (Rückgabe)nein
passthruja (raw)neinja (Parameter &$return_var)

Befehle

exec

exec() führt einen angegebenen Befehl (command) aus.

$result = \exec('whoami');

passthru

Führt ein externes Programm aus und zeigt dessen Ausgabe an.

// Ausgabe direkt an Console oder Browser
\passthru("cat myfile", $err);

system

Die Funktion system() ähnelt der C Version der Funktion sehr, indem es einen übergebenen Befehl ausführt und dessen Ausgabe anzeigt.

Wird ein system()-Funktionsaufruf durchgeführt, versucht die Funktion automatisch, nach jeder Ausgabezeile den Ausgabepuffer zu flushen, sofern PHP als Servermodul läuft.

Wenn Sie einen Befehl ausführen wollen und die erzeugten Daten ohne Behinderung direkt zurückgeben wollen, verwenden Sie stattdessen die Funktion passthru().

$lastLine = \system('ls', $retval);

shell_exec

Diese Funktion ist identisch zum Backtick-Operator.

PHP unterstützt einen Operator zur Ausführung externer Programme: Die sog. Backticks.

Note

Die Backticks sind keine einfachen Anführungszeichen! PHP versucht, den Text zwischen den Backticks als Kommandozeilen-Befehl auszuführen. Die Ausgabe des aufgerufenen Programms wird zurückgegeben (d.h. wird nicht einfach ausgegeben, sondern kann einer Variablen zugewiesen werden).


</div>
</div>
    
Die Verwendung des Backtick-Operators ist mit shell_exec() identisch.

$output = \shell_exec(‘ls -lart’);