Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
 
 
 

PHP CLI: PHP-Skripte über die Kommandozeile ausführen

Sie befinden sich: Home > Php Tutorial > PHP CLI: PHP-Skripte über...

PHP CLI: PHP-Skripte über die Kommandozeile ausführen


Eintrag am:  24.03.2026
Hits / Besucher:  34
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

PHP ist weit mehr als eine Sprache für Webseiten. Mit dem CLI-Modus (Command Line Interface) lassen sich PHP-Skripte direkt im Terminal ausführen, ohne dass ein Webserver wie Apache oder Nginx benötigt wird. Das eröffnet Möglichkeiten für Cronjobs, Build-Skripte, Datenbank-Migrationen und Automatisierungsaufgaben aller Art. Dieses Tutorial erklärt die grundlegende Nutzung von PHP-CLI, zeigt das Übergeben von Argumenten, beleuchtet die Unterschiede zum Webserver-Modus und stellt praktische Einsatzszenarien vor.

Illustration zum Tutorial: PHP CLI: PHP-Skripte über die Kommandozeile ausführen

Los geht es mit den Grundlagen: Was genau ist die CLI-SAPI und worin unterscheidet sie sich von der Webserver-Ausführung?

Was ist PHP-CLI?

PHP verfügt über verschiedene Schnittstellen (SAPIs), über die der Interpreter aufgerufen werden kann. Die bekannteste ist das Apache-Modul apache2handler, das PHP-Code bei HTTP-Anfragen verarbeitet. Daneben existiert die CLI-SAPI, die PHP als eigenständiges Kommandozeilenprogramm bereitstellt.

flowchart TD
    A["PHP-Skript"] --> B{"Modus?"}
    B -->|"Webserver"| C["Apache / Nginx
$_GET, $_POST
Zeitlimit aktiv
Ausgabe an Browser"]
    B -->|"CLI"| D["Kommandozeile
$argv, $argc
Kein Zeitlimit
Ausgabe an Terminal"]

Im CLI-Modus entfällt der gesamte HTTP-Kontext. Stattdessen kommuniziert PHP über STDIN, STDOUT und STDERR mit dem Terminal. Das macht PHP-CLI ideal für Aufgaben, die keine Browserausgabe erfordern, etwa das Verarbeiten von Dateien, das Ausführen geplanter Aufgaben oder das Erstellen eigener Kommandozeilenwerkzeuge.

PHP-Version prüfen und erste Schritte

Bevor ein Skript ausgeführt wird, empfiehlt sich ein kurzer Check der installierten PHP-Version und der verfügbaren Module.

<?php

/* Terminal-Befehle (ohne PHP-Tags im Terminal eingeben): */
/* php -v Version anzeigen */
/* php -m Geladene Module auflisten */
/* php --ini Verwendete php.ini anzeigen */

/* Einzeiler direkt im Terminal ausfuehren: */
/* php -r "echo 'Hallo von PHP-CLI' . PHP_EOL;" */

/* Skriptdatei ausfuehren: */
/* php skript.php */

echo php_sapi_name() . PHP_EOL;
/* Ausgabe: cli */

Der Befehl php -v zeigt die installierte Version an. Mit php -m lassen sich alle geladenen Erweiterungen auflisten. Der Befehl php --ini verrät, welche Konfigurationsdatei geladen wird. Wichtig ist hierbei, dass PHP-CLI eine eigene php.ini verwenden kann, die sich von der Webserver-Variante unterscheidet. Die Funktion php_sapi_name() gibt innerhalb eines Skripts den aktuellen SAPI-Modus zurück, im Terminal also cli.

Argumente an PHP-Skripte übergeben

Kommandozeilenskripte benötigen häufig Parameter, um flexibel einsetzbar zu sein. PHP stellt dafür die Variablen $argc und $argv bereit.

<?php

/* Aufruf: php gruss.php Max */

if ($argc < 2) {
echo "Bitte einen Namen angeben." . PHP_EOL;
exit(1);
}

echo "Hallo, " . $argv[1] . "!" . PHP_EOL;

Die Variable $argv enthält alle Argumente als Array. Der erste Eintrag $argv[0] ist immer der Name des Skripts selbst, ab $argv[1] folgen die übergebenen Parameter. Die Variable $argc gibt die Gesamtzahl der Argumente an. Für komplexere Szenarien mit benannten Optionen bietet PHP die Funktion getopt().

<?php

/* Aufruf: php export.php --format=csv --limit=100 */

$optionen = getopt('', ['format:', 'limit:']);

$format = $optionen['format'] ?? 'json';
$limit = (int) ($optionen['limit'] ?? 50);

echo "Export: $format, Limit: $limit" . PHP_EOL;

Der Doppelpunkt nach dem Optionsnamen signalisiert, dass die Option einen Wert erwartet. Ohne Doppelpunkt wird die Option als boolescher Schalter behandelt. Der Null-Coalescing-Operator ?? setzt dabei Standardwerte, falls eine Option nicht angegeben wurde. So entstehen flexible Skripte, die sich wie professionelle Kommandozeilenwerkzeuge verhalten.

Unterschiede zwischen CLI und Webserver-Modus

Der CLI-Modus unterscheidet sich in mehreren Punkten grundlegend von der Webserver-Ausführung. Diese Unterschiede zu kennen verhindert typische Fehler bei der Entwicklung von CLI-Skripten.

<?php

/* CLI-spezifische Einstellungen pruefen */

echo "SAPI: " . php_sapi_name() . PHP_EOL;
echo "max_execution_time: " . ini_get('max_execution_time') . PHP_EOL;
/* Ausgabe im CLI-Modus: 0 (unbegrenzt) */

/* HTTP-Superglobals sind im CLI-Modus leer */
var_dump($_GET);
/* array(0) {} */

var_dump($_POST);
/* array(0) {} */

Im CLI-Modus ist max_execution_time standardmäßig auf 0 gesetzt, was unbegrenzte Laufzeit bedeutet. Die Superglobals $_GET, $_POST und die HTTP-Teile von $_SERVER sind leer, da kein HTTP-Request existiert. Die Ausgabe geht an STDOUT statt an einen Browser, HTML-Tags werden also nicht interpretiert. Außerdem verwendet PHP-CLI möglicherweise eine andere php.ini als der Webserver, was zu unterschiedlichem Verhalten bei Erweiterungen und Einstellungen führen kann. Relative Pfadangaben im Skript beziehen sich auf das aktuelle Arbeitsverzeichnis des Terminals, nicht auf das Verzeichnis der Skriptdatei.

Shebang-Zeile für ausführbare PHP-Skripte

Auf Linux und macOS lässt sich ein PHP-Skript direkt ausführbar machen, sodass der Aufruf ohne expliziten php-Befehl funktioniert. Dafür wird eine Shebang-Zeile an den Anfang der Datei gesetzt.

#!/usr/bin/env php

<?php
/* Datei: backup.php */
/* Ausfuehrbar machen: chmod +x backup.php */
/* Aufruf: ./backup.php */

$quellverzeichnis = $argv[1] ?? '/var/www/html';
$zeitstempel = date('Y-m-d_H-i-s');
$archivname = "backup_$zeitstempel.tar.gz";

echo "Erstelle Backup von $quellverzeichnis ..." . PHP_EOL;
exec("tar -czf /tmp/$archivname $quellverzeichnis 2>&1", $ausgabe, $exitcode);

if ($exitcode === 0) {
echo "Backup erfolgreich: /tmp/$archivname" . PHP_EOL;
} else {
echo "Fehler beim Backup:" . PHP_EOL;
echo implode(PHP_EOL, $ausgabe) . PHP_EOL;
exit(1);
}

Die Zeile #!/usr/bin/env php teilt dem Betriebssystem mit, welcher Interpreter die Datei ausführen soll. Der Befehl chmod +x backup.php setzt das Ausführungsrecht. Danach lässt sich das Skript mit ./backup.php starten. Auf Windows ist diese Methode nicht verfügbar, dort muss PHP immer explizit mit php skript.php aufgerufen werden.

Praxisbeispiele für PHP-CLI

PHP-CLI eignet sich für zahlreiche Aufgaben im Entwicklungsalltag. Die folgenden Beispiele zeigen typische Einsatzszenarien.

Cronjob mit PHP

Wiederkehrende Aufgaben lassen sich über Cronjobs automatisieren. Ein Crontab-Eintrag ruft das PHP-Skript in regelmäßigen Abständen auf.

<?php

/* Crontab-Eintrag (alle 6 Stunden):
0 6 * * * /usr/bin/php /var/www/scripts/cleanup.php */

$logverzeichnis = '/var/log/app';
$maxAlter = 30;

$dateien = glob("$logverzeichnis/*.log");
$geloescht = 0;

foreach ($dateien as $datei) {
$alter = (time() - filemtime($datei)) / 86400;
if ($alter > $maxAlter) {
unlink($datei);
$geloescht++;
}
}

echo "$geloescht Logdateien geloescht." . PHP_EOL;

Der volle Pfad zum PHP-Interpreter ist im Crontab wichtig, da Cronjobs eine minimale Umgebung ohne den üblichen PATH verwenden. Das Skript löscht in diesem Beispiel Logdateien, die älter als 30 Tage sind.

STDIN lesen

CLI-Skripte können auch interaktiv mit dem Benutzer kommunizieren, indem sie Eingaben über STDIN entgegennehmen.

<?php

echo "Wie heisst du? ";
$name = trim(fgets(STDIN));

echo "Welche Sprache lernst du? ";
$sprache = trim(fgets(STDIN));

echo "Willkommen, $name! Viel Erfolg mit $sprache." . PHP_EOL;

Die Funktion fgets(STDIN) liest eine Zeile von der Standardeingabe. Mit trim() werden Zeilenumbrüche am Ende entfernt. So lassen sich einfache interaktive Werkzeuge oder Installationsassistenten bauen.

PHP-CLI auf verschiedenen Betriebssystemen

Die Installation von PHP-CLI unterscheidet sich je nach Plattform. Auf Ubuntu und Debian installiert der Befehl sudo apt install php-cli das CLI-Paket. Auf macOS lässt sich PHP über Homebrew mit brew install php einrichten. Unter Windows wird PHP als ZIP-Archiv von der offiziellen Seite heruntergeladen, entpackt und der Pfad zur php.exe in die Systemumgebungsvariable PATH eingetragen. Auf allen Plattformen bestätigt php -v die erfolgreiche Installation.

Fazit

PHP-CLI erweitert die Einsatzmöglichkeiten von PHP weit über den Webserver hinaus. Skripte lassen sich direkt im Terminal ausführen, Argumente werden über $argv und getopt() entgegengenommen, und die Shebang-Zeile macht Skripte auf Linux und macOS direkt ausführbar. Der CLI-Modus kennt keine Zeitbegrenzung, arbeitet ohne HTTP-Kontext und nutzt möglicherweise eine eigene php.ini. Für Cronjobs, Automatisierung und Build-Prozesse ist PHP-CLI damit ein unverzichtbares Werkzeug im Entwicklungsalltag.

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.