Zum Inhalt springen

Composer: Abhängigkeiten in PHP-Projekten verwalten

Jedes ernsthafte PHP-Projekt nutzt fremden Code. Composer sorgt dafür, dass auf dem Entwicklungsrechner, im Test und auf dem Server exakt dieselben Fassungen laufen — vorausgesetzt, man verwendet ihn richtig.

  • Für wenEntwickler, technisch Interessierte
  • NiveauMittel
  • Lesezeitetwa 7 Minuten
  • Stand16. Oktober 2026

Das lernen Sie

  • Was Composer tut und was er ausdrücklich nicht tut
  • Der Unterschied zwischen composer.json und composer.lock
  • Warum install und update völlig verschiedene Befehle sind
  • Was beim Betrieb zu beachten ist

Zwei Dateien, zwei Aufgaben

`composer.json` beschreibt, was Sie wollen: welche Pakete und in welchem Spielraum. `composer.lock` hält fest, was dabei herausgekommen ist: jedes Paket mit genau einer Version und einer Prüfsumme.

JSONcomposer.json, Auszug
{ "require": { "php": ">=8.2", "monolog/monolog": "^3.5" }, "require-dev": { "phpunit/phpunit": "^11.0" } }
Das Zeichen ^ erlaubt Aktualisierungen bis zur nächsten Hauptversion: ^3.5 nimmt 3.6 und 3.9, aber nicht 4.0. Bei Versionen unter 1.0 gilt es enger: ^0.3 erlaubt 0.3.x, aber nicht 0.4.: ^3.5 nimmt 3.6 und 3.9, aber nicht 4.0.

Bei einer Anwendung gehören beide Dateien in die Versionsverwaltung — auch die Sperrdatei, gerade die. Bei Bibliotheken, die andere als Paket einbinden, wird sie oft weggelassen, weil sie für deren Nutzer ohne Wirkung ist. Sie ist der Grund, warum ein Kollege und der Server denselben Stand bekommen wie Sie.

install und update verwechselt man genau einmal

  • `composer install` liest die Sperrdatei und installiert exakt die dort festgehaltenen Versionen. Das ist der Befehl für Kollegen, für die Testumgebung und für den Server.
  • `composer update` sucht innerhalb der erlaubten Spielräume neue Versionen, installiert sie und schreibt die Sperrdatei neu. Das ist eine bewusste Entscheidung, die jemand prüfen muss.

Ein `composer update` auf dem Server ist ein Vorgang, dessen Ergebnis niemand vorher gesehen hat. Dasselbe gilt für `composer update` kurz vor einer Auslieferung.

Ein Beispiel aus der Praxis

Wenn Installation und Sperrdatei auseinanderlaufen

Ein Entwicklungsbaum, in dem nach einem Wechsel der Sperrdatei nie `composer install` lief, trägt andere Paketversionen, als das Projekt vorsieht. Die Folge ist ein Fehlerbild, das in die Irre führt: Tests scheitern reihenweise in einem Bereich, den niemand angefasst hat.

Deshalb lohnt sich eine automatische Prüfung, die bei jedem Testlauf mitläuft und genau das meldet — ein Abgleich der installierten Pakete gegen die Sperrdatei. Ein Fehlerbündel in einem Bereich, den niemand angefasst hat, ist ein typisches Anzeichen für abweichende Paketversionen und sollte deshalb zuerst gegen die Sperrdatei geprüft werden; andere Ursachen sind damit nicht ausgeschlossen.

Was im Betrieb zählt

  • Auf dem Server gehört `composer install` in den Ausliefervorgang, nicht `update`. Der Schalter `--no-dev` lässt Entwicklungspakete weg. Das ist auf einem Produktivsystem richtig — aber nur, wenn die Anwendung dort wirklich keines davon braucht. `composer dump-autoload -o` erzeugt eine Classmap und beschleunigt den Start; mit `-a` (classmap-authoritative) wird ausschließlich diese Liste verwendet, eine Klasse, die nicht darin steht, wird dann nicht mehr gefunden. Eine Klasse, deren Pfad nicht zur Zuordnung passt, fehlt dann. `composer audit` meldet bekannte Sicherheitslücken in den installierten Paketen. Der Befehl gehört in die regelmäßige Pflege.

Häufige Missverständnisse

Doch. Ohne sie bekommt jeder Beteiligte irgendeinen Stand innerhalb des Spielraums, und „bei mir läuft es" wird zur Regel.

Nein. Er prüft nur, ob die geforderten vorhanden sind, und bricht sonst ab. Installiert werden sie vom System.

Aktualisieren ist wichtig, aber als eigener, geprüfter Schritt — nicht nebenbei beim Ausliefern.

Weiterführende Quellen

Über den Autor

Fabian Lücker ist geschäftsführender Gesellschafter der PHP-Schmiede KG in Rheine und seit 2007 in der Softwareentwicklung tätig. Er verantwortet Entwicklung und Konzeption und schreibt hier über Entscheidungen, die in echten Projekten anfallen.