Abschnitt 9 · Lektion 6
PHP und Composer auf deinem Rechner
Das Werkzeug aus Abschnitt 8 sortiert eine CSV nach einer Spalte, nur liegt diese CSV auf einer Maschine im Rechenzentrum, und deine eigenen Dateien liegen woanders. Damit es dort arbeitet, wo sie liegen, braucht dein Rechner PHP und für die Pakete aus diesem Abschnitt auch Composer. Eine Aufgabe hat diese Lektion nicht, denn was auf deinem Rechner passiert, sehe ich von hier aus nicht.
Welche Version
Zu Hause nehme ich die aktuelle Version, im Oktober 2026 ist das PHP 8.5, dieselbe wie in der Sandbox. Der Code des Kurses läuft trotzdem ab PHP 8.2, weil auf einem gemieteten Hosting-Paket nicht immer die neueste Version liegt. Wo PHP 8.2 bis PHP 8.4 anders antworten, sagt es die Lektion an der Stelle. Wie lange eine Version Sicherheitsupdates bekommt, steht auf php.net unter „Supported Versions“, für PHP 8.2 bis zum 31.12.2026 und für PHP 8.5 bis zum 31.12.2029 (nachgesehen am 18.10.2026).
<?php
declare(strict_types=1);
// Laeuft auf deinem Rechner genauso, im Terminal mit: php pruefen.php
echo "PHP ", PHP_VERSION, " auf ", PHP_OS_FAMILY, "\n";
$alles = version_compare(PHP_VERSION, "8.2.0", ">=");
echo "Ab PHP 8.2: ", $alles ? "ja" : "nein", "\n";
foreach (["mbstring", "pdo_sqlite", "fileinfo", "dom", "xmlwriter"] as $erweiterung) {
$da = extension_loaded($erweiterung);
echo $erweiterung, ": ", $da ? "da" : "fehlt", "\n";
$alles = $alles && $da;
}
echo $alles ? "Passt, alles da.\n" : "Da fehlt noch etwas.\n"; Die erste Zeile nennt Version und Betriebssystem. Hier steht Linux, die Sandbox ist ein
Linux-Rechner, und auf deinem Rechner steht dort Windows oder für den Mac Darwin. Das
version_compare() aus der Lektion über die composer.json vergleicht die Versionsnummern Stück
für Stück. Darunter steht je Erweiterung „da“ oder „fehlt“, und wenn alles reicht, endet die Ausgabe
mit „Passt, alles da.“ Das Prüfskript ist zum Mitnehmen, auf deinem Rechner läuft es mit
php pruefen.php.
Was eine Erweiterung ist
Eine Erweiterung (englisch extension) ist ein Teil von PHP, der eine Gruppe Funktionen und Klassen
mitbringt. Manche sind fest eingebaut, andere liegen als eigene Datei daneben und werden erst über
die Einstellungsdatei php.ini geladen, je nachdem, wer PHP für dein System gebaut hat. Composer
holt keine Erweiterung, seine Pakete sind PHP-Code.
Das Beispiel prüft die fünf, die nicht überall von selbst dabei sind. Das sind mbstring für Text mit
Umlauten, wie ihn mb_strlen() seit Abschnitt 2 zählt, pdo_sqlite für die Datenbank ab Abschnitt
14, fileinfo für das Hochladen in Abschnitt 11, dom und xmlwriter für PHPUnit in Abschnitt 17. Was
der Kurs sonst benutzt, bringen die Wege unten von selbst mit. php -m in der Befehlsleiste listet
alles, was ein PHP geladen hat.
Windows
Auf php.net unter Downloads steht ein Wähler für System und Version. Für Windows macht dort der
„Single Line Installer“ am wenigsten Handarbeit, eine einzige Zeile für das Terminal, das im
Startmenü „Terminal“ heißt, auf älteren Windows-Versionen „PowerShell“. Sie holt PHP von php.net,
legt eine php.ini an und trägt den Ordner in den PATH ein, die Liste der Ordner, in denen
Windows nach Befehlen sucht. Bei ihrer Frage nach der Zeitzone passt Europe/Berlin, denn mit dem
Standardwert UTC geht date() hierzulande eine oder zwei Stunden nach. Ein Terminal, das schon
vorher offen war, kennt den neuen PATH nicht, ein neu geöffnetes schon.
Unter Windows liegen mbstring, pdo_sqlite und fileinfo als eigene Datei bei, nur steht in der neuen
php.ini vor ihrer Zeile ein Semikolon, und das schaltet sie aus. Für den Kurs muss es vor
extension=mbstring, extension=pdo_sqlite und extension=fileinfo weg; dom und xmlwriter sind
dort fest eingebaut. Wo die Datei liegt, zeigt php --ini in der Zeile „Loaded Configuration File“.
Mac
Für den Mac zeigt der Wähler zuerst eine Zeile, die Homebrew installiert, einen Paketverwalter für
Programme, und danach die für PHP. Mit Homebrew genügt brew install php, das holt die aktuelle
Version samt allen fünf Erweiterungen. Das Terminal liegt unter Programme im Ordner Dienstprogramme.
Linux
Unter Linux kommt PHP aus der Paketquelle der Distribution. Der Wähler zeigt für Debian und Ubuntu
sudo apt install -y php, und für den Kurs reichen die Kommandozeile und die Erweiterungen, also
sudo apt install php-cli php-mbstring php-sqlite3 php-xml (dom und xmlwriter kommen mit php-xml).
Welche Version dabei herauskommt, hängt an der Ausgabe des Systems, und php --version sagt es. Ist
sie älter als PHP 8.2, wie bei Ubuntu 22.04 mit PHP 8.1, zeigt der Wähler mit einer Versionsnummer
statt „default PHP version for OS“ eine zusätzliche Paketquelle. Sie stammt nicht vom PHP-Projekt,
und die Seite sagt das dazu.
Composer
Composer kommt von getcomposer.org. Für Windows nennt die Seite unter „Getting Started“ das Programm
Composer-Setup.exe. Es fragt nach dem PHP von eben, trägt Composer in den PATH ein und schaltet in
der php.ini ein, was Composer selbst braucht, darunter openssl. Auf dem Mac holt
brew install composer ihn dazu.
Unter Linux stehen unter „Download“ vier Zeilen, die den Installer holen, prüfen, starten und wieder
löschen. Sie ändern sich mit jeder Fassung des Installers, deshalb stehen sie hier nicht. Danach
liegt eine composer.phar im Ordner, und sudo mv composer.phar /usr/local/bin/composer macht
daraus den Befehl composer. Auf allen drei Systemen tut dann composer require ramsey/uuid, was
die Lektion über das Installieren beschreibt, diesmal mit Netz.
Das Werkzeug zu Hause starten
Für die eigenen Werkzeuge lohnt ein eigener Ordner, etwa werkzeuge in deinen Dokumenten. Hinein
kommt deine werkzeug.php aus Abschnitt 8 und daneben die artikel.csv.
artikel;preis;menge
Kaffee;12,45;2
Notizbuch;2,50;5
Schreibtisch;47,30;1 <?php
declare(strict_types=1);
// Das Werkzeug aus Abschnitt 8, fertig. Aufgerufen wird es mit
// der Spalte, nach der sortiert wird:
//
// php werkzeug.php preis
function lies(string $pfad): array
{
$datei = fopen($pfad, "r");
$kopf = fgetcsv($datei, separator: ";", escape: "");
$zeilen = [];
while (($felder = fgetcsv($datei, separator: ";", escape: "")) !== false) {
$zeilen[] = array_combine($kopf, $felder);
}
fclose($datei);
return $zeilen;
}
function alsZahl(string $wert): float
{
return (float) str_replace(",", ".", $wert);
}
function sortiere(array $zeilen, string $feld): array
{
usort($zeilen, fn(array $a, array $b) => alsZahl($a[$feld]) <=> alsZahl($b[$feld]));
return $zeilen;
}
function gibAus(array $zeilen, string $feld): void
{
foreach ($zeilen as $nummer => $zeile) {
echo $nummer + 1, ". ", $zeile["artikel"], " (", $zeile[$feld], ")\n";
}
echo count($zeilen), " Zeilen sortiert nach ", $feld, "\n";
}
$feld = $argv[1] ?? "preis";
$zeilen = sortiere(lies("artikel.csv"), $feld);
gibAus($zeilen, $feld);
file_put_contents(
"ergebnis.json",
json_encode($zeilen, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)
); Im Terminal wechselt cd (change directory) in diesen Ordner, cd Documents/werkzeuge oder wie er
bei dir heißt. Danach startet php werkzeug.php preis das Werkzeug, und die erste Zeile lautet wie
hier 1. Notizbuch (2,50). Ein anderes Feld ist nur ein anderes Argument, php werkzeug.php menge
sortiert nach der Menge.
Der Fehler, der an dieser Stelle wartet, ist der falsche Ordner. Ein frisch geöffnetes Terminal
steht in deinem persönlichen Ordner und nicht in werkzeuge, und PHP sucht die Datei dort, wo das
Terminal steht. cd .. && php werkzeug.php preis aus der Befehlsleiste spielt das nach, der Befehl
wechselt erst einen Ordner höher und startet dann. Im Terminal steht
Could not open input file: werkzeug.php. Mit vollem Pfad findet PHP die Datei, das Werkzeug aber
seine artikel.csv nicht, denn ein Pfad im Code gilt vom Arbeitsverzeichnis aus. Schreibt es den
Pfad als __DIR__ . "/artikel.csv" wie in Abschnitt 8, findet es sie von überall.
Den Server ab Abschnitt 10 startet dasselbe PHP, und unter welcher Adresse er zu Hause antwortet, steht in der Lektion „Die erste Seite“.
Zum Mitnehmen
Für zu Hause empfehle ich die aktuelle Version, der Kurs braucht PHP 8.2 oder neuer und dazu fünf Erweiterungen, die das Prüfskript abfragt. Unter Windows schaltet erst die php.ini sie ein, Composer kommt von getcomposer.org, und ein Werkzeug startet aus dem Ordner, in dem es liegt.
Jetzt du
Basis Konto, kostenlosIm Editor änderst du die Beispiele dieser Lektion und lässt sie gleich laufen. So merkst du am schnellsten, ob es sitzt.
Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.
In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.
Was in dieser Lektion steckt
-
Artikel mit 2 Beispielen zum Ausprobieren
Steht hier, ohne Konto lesbar.