exec vs system vs passthru vs shell_exec

Übersicht

Funktion Parameter Rückgabewert
exec string $command,
[array &$output],
[int &$return_var]
string
passthru string $command,
[int &$return_var]
void
shell_exec string $cmd string
system string $command,
[int &$return_var]
string
Funktion Direkte Ausgabe Ausgabe als Variable Exitcode als Variable
exec nein array (Parameter $output),
string (letzte Zeile)
ja (Parameter return_var)&$
system ja (text) string (letzte Zeile) ja
shell_exec nein string (Rückgabe) nein
passthru ja (raw) nein ja (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.

Achtung

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).

Die Verwendung des Backtick-Operators ist mit shell_exec() identisch.

$output = \shell_exec('ls -lart');