exec
(PHP 4, PHP 5, PHP 7, PHP 8)
exec — Führt ein externes Programm aus
Parameter-Liste
command
-
Der auszuführende Befehl
output
-
Ist der Parameter output
vorhanden, wird
das angegebene Array mit jeder Zeile der Befehlsausgabe gefüllt. Am Ende
einer jeweiligen Zeile stehende Whitespaces wie beispielsweise
ein \n
werden nicht in dieses Array übernommen.
Beachten Sie, dass wenn das Array bereits Elemente enthält, die Funktion
exec() die Ausgabe an das Array anhängt. Wenn
Sie dieses nicht wünschen, rufen Sie die Funktion unset
() für das Array auf, bevor Sie es als Parameter der
Funktion exec() übergeben.
result_code
-
Ist der Parameter result_code
zusammen mit
dem Parameter output
angegeben, so
wird der Rückgabestatus des ausgeführten Befehls in diese
Variable geschrieben.
Rückgabewerte
Die letzte Zeile der Ausgabe des Befehls. Wenn ein Befehl ausgeführt werden
muss und alle Daten des Befehls direkt ohne Umweg über ein Array ausgegeben
werden sollen, kann die Funktion passthru() verwendet
werden.
Gibt bei einem Fehler false
zurück.
Um die Ausgabe des ausgeführten Befehls zu erhalten, muss sichergestellt
werden, dass der Parameter output
gesetzt und
verwendet wird.
Fehler/Exceptions
Wenn exec() den Befehl command
nicht ausführen kann, wird eine Meldung der Stufe
E_WARNING
ausgegeben.
Löst einen ValueError aus, wenn
command
leer ist oder Nullbytes enthält.
Beispiele
Beispiel #1 Ein exec()-Beispiel
<?php
// Gibt den Benutzernamen aus, unter dem der PHP/HTTPD-Prozess läuft
// (auf einem System in dem das Programm "whoami" im Ausführungspfad liegt)
exec('whoami', $output, $retval);
echo "Rückgabe mit Status $retval und Ausgabe:\n";
print_r($output);
?>
Das oben gezeigte Beispiel erzeugt
eine ähnliche Ausgabe wie:
Rückgabe mit Status 0 und Ausgabe:
Array
(
[0] => cmb
)
Anmerkungen
WarnungFalls Sie es erlauben, dass Daten von
Usereingaben an diese Funktion weitergereicht werden, sollten Sie
escapeshellarg() oder escapeshellcmd()
verwenden. Bei Verwendung dieser Funktionen stellen Sie sicher, dass kein
Benutzer Ihr System überlisten kann, beliebige Kommandos auszuführen
Hinweis:
Wenn ein Programm mit dieser Funktion
gestartet wird und im Hintergrund weiterlaufen soll, muss die Ausgabe des Programms
in eine Datei oder einen anderen Ausgabestrom umgeleitet werden. Anderenfalls bleibt
PHP solange hängen, bis das Programm zu Ende ausgeführt wurde.
Hinweis:
Unter Windows startet exec() zunächst
cmd.exe um das Kommande auszuführen. Um ein externes Programm auszuführen ohne zuvor cmd.exe zu starten, sollte
proc_open() mit der Option bypass_shell
verwendet werden.