Signatur
Beschreibung
$argv ist eine Superglobale Variable, die als Array alle Argumente enthält, die beim Aufruf eines PHP-Skripts auf der Kommandozeile (CLI) übergeben wurden. Das erste Element $argv[0] ist immer der Name (Pfad) des ausgeführten Skripts selbst, gefolgt von den eigentlichen Argumenten ab Index 1.
Die Variable steht ausschließlich im CLI-Kontext zur Verfügung. Im Webserver-Kontext ist $argv in der Regel nicht verfügbar oder leer, sofern die PHP-Direktive register_argc_argv nicht aktiviert ist. Für CLI-Skripte ist sie standardmäßig verfügbar.
Zusammen mit $argc, das die Anzahl der übergebenen Argumente enthält, bildet $argv das Basis-Werkzeug für die Verarbeitung von Kommandozeilenparametern. Für komplexere Anforderungen (Optionen mit Flags, Pflichtargumente etc.) empfiehlt sich die Klasse \GetOpt oder die Erweiterung ext/getopt über die Funktion getopt().
$argv[0]— Name des Skripts$argv[1],$argv[2], … — die übergebenen Argumente in der Reihenfolge ihrer Angabe
Beispiele
Einfache Ausgabe aller übergebenen Argumente
<?php
// Aufruf: php skript.php Hallo Welt 42
echo 'Skriptname: ' . $argv[0] . PHP_EOL;
echo 'Anzahl Argumente (ohne Skriptname): ' . ($argc - 1) . PHP_EOL;
for ($i = 1; $i < $argc; $i++) {
echo "Argument $i: " . $argv[$i] . PHP_EOL;
}
Praxisbeispiel: Einfaches CLI-Tool mit Argumentprüfung
<?php
// Aufruf: php backup.php /var/www /backup/ziel
if ($argc < 3) {
fwrite(STDERR, "Verwendung: php " . $argv[0] . " <Quelle> <Ziel>" . PHP_EOL);
exit(1);
}
$quelle = $argv[1];
$ziel = $argv[2];
if (!is_dir($quelle)) {
fwrite(STDERR, "Fehler: Quellverzeichnis '$quelle' existiert nicht." . PHP_EOL);
exit(2);
}
echo "Starte Backup von '$quelle' nach '$ziel'..." . PHP_EOL;
// ... weitere Logik ...
// Wichtig · Fallstricke
Nur im CLI-Modus: Im Webserver-Kontext (Apache, Nginx etc.) ist $argv standardmäßig nicht befüllt. Die PHP-Direktive register_argc_argv muss in der php.ini auf On gesetzt sein, damit $argv im Web-Kontext überhaupt gesetzt wird – was jedoch aus Sicherheitsgründen nicht empfohlen wird.
Sicherheit: Alle Werte in $argv sind vom Benutzer kontrollierte Eingaben und müssen wie jede externe Eingabe validiert und ggf. escaped werden, bevor sie in Dateioperationen, Shell-Befehlen oder Datenbankabfragen verwendet werden. Insbesondere bei Verwendung von shell_exec(), exec() oder system() ist escapeshellarg() zwingend erforderlich.
Wird PHP mit dem Parameter -- aufgerufen (z. B. php skript.php -- --option), werden alle nachfolgenden Werte als reguläre Argumente und nicht als PHP-Optionen interpretiert.