Start · Sprachen · PHP · Referenz · $argv

$argv

Superglobal

Enthält alle Argumente, die beim Aufruf eines PHP-Skripts über die Kommandozeile übergeben wurden.

seit PHP 4.0.0 Kategorie: http

Signatur

array $argv

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;
}
Skriptname: skript.php Anzahl Argumente (ohne Skriptname): 3 Argument 1: Hallo Argument 2: Welt Argument 3: 42

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 ...
Starte Backup von '/var/www' nach '/backup/ziel'...

// 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.