Es gibt einige Besonderheiten, die hier nicht angesprochen wurden:
- Mit exec() können Sie eine optionale param-Variable übergeben, die ein Array von Ausgabezeilen erhält. In einigen Fällen kann dies Zeit sparen, insbesondere wenn die Ausgabe der Befehle bereits in Tabellenform vorliegt.
Vergleichen Sie:
exec('ls', $out);
var_dump($out);
// Look an array
$out = shell_exec('ls');
var_dump($out);
// Look -- a string with newlines in it
Umgekehrt, wenn die Ausgabe des Befehls ist xml oder json, dann mit jeder Zeile als Teil eines Arrays ist nicht das, was Sie wollen, wie Sie brauchen, um die Eingabe in eine andere Form nachbearbeiten, so dass in diesem Fall verwenden shell_exec.
Es ist auch erwähnenswert, dass shell_exec ein Alias für den Backtic-Operator ist, für diejenigen, die mit *nix vertraut sind.
$out = `ls`;
var_dump($out);
exec unterstützt auch einen zusätzlichen Parameter, der den Rückgabecode des ausgeführten Befehls angibt:
exec('ls', $out, $status);
if (0 === $status) {
var_dump($out);
} else {
echo "Command failed with status: $status";
}
Wie in der shell_exec-Handbuchseite erwähnt, haben Sie keine andere Wahl, als exec zu verwenden, wenn Sie tatsächlich einen Rückgabewert des auszuführenden Befehls benötigen.