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.