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');