Composer ist ein beliebtes Abhängigkeitsmanagement-Tool für PHP, das hauptsächlich zur Erleichterung der Installation und Aktualisierung von Projektabhängigkeiten entwickelt wurde. Es prüft, von welchen anderen Paketen ein bestimmtes Projekt abhängt, und installiert sie für Sie, wobei die entsprechenden Versionen entsprechend den Projektanforderungen verwendet werden. Composer wird auch häufig zum Booten neuer Projekte verwendet, die auf gängigen PHP-Frameworks wie Symfony und Laravel basieren.
In diesem Tutorial werden Sie Composer auf einem Ubuntu 20.04-System installieren und damit starten.
Um diesem Leitfaden folgen zu können, benötigen Sie Zugriff auf einen Ubuntu 20.04-Server als Nicht-root sudo
-Benutzer und eine auf Ihrem Server aktivierte Firewall. Sie können zur Einrichtung unserem Leitfaden zur Ersteinrichtung eines Servers für Ubuntu 20.04 folgen.
Zusätzlich zu Abhängigkeiten, die bereits in Ihrem Ubuntu 20.04-System enthalten sein sollten, wie z. B. git
und curl
, benötigt Composer php-cli
, um PHP-Skripte in der Befehlszeile auszuführen und unzip
, um komprimierte Archive zu extrahieren. Wir installieren diese Abhängigkeiten jetzt.
Aktualisieren Sie zunächst den Paketmanager-Cache, indem Sie Folgendes ausführen:
- sudo apt update
Führen Sie als Nächstes den folgenden Befehl aus, um die erforderlichen Pakete zu installieren:
- sudo apt install php-cli unzip
Sie werden aufgefordert, die Installation zu bestätigen, indem Sie Y
und dann ENTER
eingeben.
Sobald die Voraussetzungen installiert sind, können Sie Composer installieren.
Composer bietet ein in PHP geschriebenes Installationsskript. Wir werden es herunterladen, sicherstellen, dass es nicht beschädigt ist, und es dann verwenden, um Composer zu installieren.
Stellen Sie sicher, dass Sie sich in Ihrem Startverzeichnis befinden, und rufen Sie das Installationsprogramm mit curl
ab:
- cd ~
- curl -sS https://getcomposer.org/installer -o composer-setup.php
Als nächstes überprüfen wir, ob das heruntergeladene Installationsprogramm mit dem SHA-384-Hash für das neueste Installationsprogramm übereinstimmt, das auf der Seite Öffentliche Schlüssel/Signaturen von Composer zu finden ist. Um den Überprüfungsschritt zu vereinfachen, können Sie den folgenden Befehl verwenden, um den neuesten Hash programmgesteuert von der Composer-Seite abzurufen und in einer Shell-Variable zu speichern:
- HASH=`curl -sS https://composer.github.io/installer.sig`
Wenn Sie den erhaltenen Wert überprüfen möchten, können Sie Folgendes ausführen:
- echo $HASH
Outpute0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a
Führen Sie nun den folgenden PHP-Code aus, wie auf der Composer-Download-Seite angegeben, um zu überprüfen, ob das Installationsskript sicher ausgeführt werden kann:
- php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Sie sehen die folgende Ausgabe:
Installer verified
Wenn in der Ausgabe Installer corrupt
angezeigt wird, müssen Sie das Installationsskript erneut herunterladen und überprüfen, ob Sie den richtigen Hash verwenden. Wiederholen Sie dann den Verifizierungsvorgang. Wenn Sie ein verifiziertes Installationsprogramm haben, können Sie fortfahren.
Verwenden Sie zum globalen Installieren von Composer
den folgenden Befehl, mit dem Composer als systemweiter Befehl mit dem Namen composer
unter /usr/local/bin
heruntergeladen und installiert wird:
- sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
Sie sehen eine Ausgabe, die dieser ähnelt:
OutputAll settings correct for using Composer
Downloading...
Composer (version 1.10.5) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
Um Ihre Installation zu testen, führen Sie Folgendes aus:
- composer
Output ______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.10.5 2020-04-10 11:44:22
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--profile Display timing and memory usage information
--no-plugins Whether to disable plugins.
-d, --working-dir=WORKING-DIR If specified, use the given directory as working directory.
--no-cache Prevent use of the cache
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
...
Damit wird überprüft, dass Composer erfolgreich auf Ihrem System installiert und systemweit verfügbar ist.
Hinweis: Wenn Sie für jedes Projekt, das Sie auf diesem Server hosten, separate ausführbare Composer-Dateien bevorzugen, können Sie diese pro Projekt lokal installieren. Diese Methode ist auch nützlich, wenn Ihr Systembenutzer nicht berechtigt ist, Software systemweit zu installieren.
Verwenden Sie dazu den Befehl php composer-setup.php
. Dadurch wird eine composer.phar
-Datei in Ihrem aktuellen Verzeichnis generiert, die mit php composer.phar
ausgeführt werden kann.
Nun schauen wir uns das Verwenden von Composer zur Verwaltung von Abhängigkeiten an.
PHP-Projekte hängen häufig von externen Bibliotheken ab, und die Verwaltung dieser Abhängigkeiten und ihrer Versionen kann schwierig sein. Composer löst dieses Problem, indem es die Projektversionen und -abhängigkeiten verfolgt und gleichzeitig das Auffinden, Installieren und Aktualisieren von Paketen erleichtert, die für ein Projekt erforderlich sind.
Um Composer in Ihrem Projekt verwenden zu können, benötigen Sie eine Datei composer.json
. Die Datei composer.json
teilt Composer mit, welche Abhängigkeiten für Ihr Projekt heruntergeladen werden müssen und welche Versionen der einzelnen Pakete installiert werden dürfen. Dies ist äußerst wichtig, um Ihr Projekt konsistent zu halten und die Installation instabiler Versionen zu vermeiden, die möglicherweise Abwärtskompatibilitätsprobleme verursachen können.
Sie müssen diese Datei nicht manuell erstellen. Dabei treten häufig Syntaxfehler auf. Composer bietet eine interaktive Möglichkeit, eine neue Datei composer.json
basierend auf den Eingaben des Benutzers zu erstellen. Dies ist eine gute Wahl, wenn Sie Ihr Projekt später als öffentliches Paket auf Packagist freigeben möchten. Composer generiert außerdem automatisch eine Barebone-Datei composer.json
, wenn Sie einen Befehl composer require
ausführen, um eine Abhängigkeit in ein neu erstelltes Projekt aufzunehmen.
Die Verwendung von Composer zum Installieren eines Pakets als Abhängigkeit in einem Projekt umfasst die folgenden Schritte:
composer require
aus, um die Abhängigkeit in die Datei composer.json
aufzunehmen und das Paket zu installieren.Versuchen wir dies mit einer Demo-Anwendung.
Das Ziel dieser Anwendung ist es, einen bestimmten Satz in eine URL-freundliche Zeichenfolge umzuwandeln - einen Slug. Dies wird häufig verwendet, um Seitentitel in URL-Pfade zu konvertieren (wie der letzte Teil der URL für dieses Lernprogramm).
Beginnen wir mit der Erstellung eines Verzeichnisses für unser Projekt. Wir nennen es slugify:
- cd ~
- mkdir slugify
- cd slugify
Obwohl dies nicht erforderlich ist, können Sie jetzt einen Befehl composer init
ausführen, um eine detaillierte Datei composer.json
für Ihr Projekt zu erstellen. Da das einzige Ziel unseres Projekts darin besteht, die Installation von Abhängigkeiten mit Composer zu demonstrieren, verwenden wir eine einfachere Datei composer.json
, die automatisch generiert wird, wenn wir unser erstes Paket benötigen.
Jetzt ist es Zeit, Packagist.org nach einem Paket zu durchsuchen, mit dem wir Slugs generieren können. Wenn Sie in Packagist nach dem Begriff „slug“ suchen, erhalten Sie ein ähnliches Ergebnis wie dieses:
Sie sehen zwei Zahlen auf der rechten Seite jedes Pakets in der Liste. Die Zahl oben gibt an, wie oft das Paket über Composer installiert wurde, und die Zahl unten gibt an, wie oft ein Paket auf GitHub mit einem Stern versehen wurde. Im Allgemeinen sind Pakete mit mehr Installationen und mehr Sternen tendenziell stabiler, da sie von so vielen Menschen verwendet werden. Es ist auch wichtig, die Paketbeschreibung auf Relevanz zu überprüfen, um sicherzustellen, dass sie Ihren Anforderungen entspricht.
Wir brauchen einen String-to-Slug-Konverter. Aus den Suchergebnissen geht hervor, dass das Paket cocur/slugify
, das als erstes Ergebnis auf dieser Seite angezeigt wird, mit einer angemessenen Anzahl von Installationen und Sternen gut übereinstimmt.
Pakete auf Packagist haben einen Anbieternamen und einen Paketnamen. Jedes Paket hat eine eindeutige Kennung (einen Namespace) im selben Format, das GitHub für seine Repositories verwendet: vendor/package
. Die Bibliothek, die wir installieren möchten, verwendet den Namespace cocur/slugify
. Sie benötigen den Namespace eines Pakets, um ihn in Ihrem Projekt zu benötigen.
Nachdem Sie nun genau wissen, welches Paket Sie installieren möchten, können Sie composer require
ausführen, um es als Abhängigkeit einzuschließen und die Datei composer.json
für Ihr Projekt zu generieren. Wenn Sie Pakete benötigen, ist es wichtig, zu beachten, dass Composer sowohl Abhängigkeiten auf Anwendungsebene als auch Abhängigkeiten auf Systemebene verfolgt. Abhängigkeiten auf Systemebene sind wichtig, um anzugeben, auf welche PHP-Module ein Paket angewiesen ist. Für das Paket cocur/slugify
ist ein PHP-Modul erforderlich, das wir noch nicht installiert haben.
Wenn ein erforderliches Paket auf einer Systembibliothek basiert, die derzeit nicht auf Ihrem Server installiert ist, wird eine Fehlermeldung angezeigt, welche Anforderung fehlt:
- composer require cocur/slugify
OutputUsing version ^4.0 for cocur/slugify
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for cocur/slugify ^4.0 -> satisfiable by cocur/slugify[v4.0.0].
- cocur/slugify v4.0.0 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
...
Um das Systemabhängigkeitsproblem zu lösen, können wir mit apt search
nach dem fehlenden Paket suchen:
- apt search mbstring
OutputSorting... Done
Full Text Search... Done
php-mbstring/focal 2:7.4+75 all
MBSTRING module for PHP [default]
php-patchwork-utf8/focal 1.3.1-1 all
UTF-8 strings handling for PHP
php7.4-mbstring/focal 7.4.3-4ubuntu1 amd64
MBSTRING module for PHP
Nachdem Sie den richtigen Paketnamen gefunden haben, können Sie apt
erneut verwenden, um die Systemabhängigkeit zu installieren:
- sudo apt install php-mbstring
Nach Abschluss der Installation können Sie den Befehl composer require
erneut ausführen:
- composer require cocur/slugify
OutputUsing version ^4.0 for cocur/slugify
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing cocur/slugify (v4.0.0): Downloading (100%)
Writing lock file
Generating autoload files
Wie Sie der Ausgabe entnehmen können, hat Composer automatisch entschieden, welche Version des Pakets verwendet werden soll. Wenn Sie jetzt das Verzeichnis Ihres Projekts überprüfen, enthält es zwei neue Dateien: composer.json
und composer.lock
sowie ein Verzeichnis vendor
:
- ls -l
Outputtotal 12
-rw-rw-r-- 1 sammy sammy 59 May 4 13:56 composer.json
-rw-rw-r-- 1 sammy sammy 3229 May 4 13:56 composer.lock
drwxrwxr-x 4 sammy sammy 4096 May 4 13:56 vendor
Die Datei composer.lock
wird verwendet, um Informationen darüber zu speichern, welche Versionen jedes Pakets installiert sind, und um sicherzustellen, dass dieselben Versionen verwendet werden, wenn jemand anderes Ihr Projekt klont und seine Abhängigkeiten installiert. Im Verzeichnis vendor
befinden sich die Projektabhängigkeiten. Der Ordner vendor
sollte nicht in die Versionskontrolle übernommen werden. Sie müssen nur die Dateien composer.json und composer.lock einschließen.
Wenn Sie ein Projekt installieren, das bereits eine composer.json
-Datei enthält, führen Sie composer install
aus, um die Abhängigkeiten des Projekts herunterzuladen.
Lassen Sie uns einen kurzen Blick auf die Versionsbeschränkungen werfen. Wenn Sie den Inhalt Ihrer Datei composer.json
überprüfen, wird Folgendes angezeigt:
- cat composer.json
Output{
"require": {
"cocur/slugify": "^4.0"
}
}
Möglicherweise bemerken Sie das Sonderzeichen ^
vor der Versionsnummer in composer.json
. Composer unterstützt verschiedene Einschränkungen und Formate zum Definieren der erforderlichen Paketversion, um Flexibilität zu bieten und gleichzeitig Ihr Projekt stabil zu halten. Der von der automatisch generierten Datei composer.json
verwendete Zirkumflex-Operator (^
) ist der empfohlene Operator für maximale Interoperabilität nach der semantischen Versionierung. In diesem Fall wird 4.0 als minimal kompatible Version definiert und Aktualisierungen auf zukünftige Versionen unter 5.0 werden zugelassen.
Im Allgemeinen müssen Sie keine Versionseinschränkungen in Ihrer composer.json
-Datei vornehmen. In einigen Situationen müssen Sie die Einschränkungen jedoch möglicherweise manuell bearbeiten, z. B. wenn eine wichtige neue Version Ihrer erforderlichen Bibliothek veröffentlicht wird und Sie ein Upgrade durchführen möchten oder wenn die Bibliothek, die Sie verwenden möchten, nicht der semantischen Versionierung folgt.
Im Folgenden finden Sie einige Beispiele, um Ihnen ein besseres Verständnis der Funktionsweise von Composer-Versionseinschränkungen zu vermitteln:
Einschränkung | Bedeutung | Erlaubte Beispielversionen |
---|---|---|
^1.0 | >= 1.0 < 2.0 | 1.0, 1.2.3, 1.9.9 |
^1.1.0 | >= 1.1.0 < 2.0 | 1.1.0, 1.5.6, 1.9.9 |
~1.0 | >= 1.0 < 2.0.0 | 1.0, 1.4.1, 1.9.9 |
~1.0.0 | >= 1.0.0 < 1.1 | 1.0.0, 1.0.4, 1.0.9 |
1.2.1 | 1.2.1 | 1.2.1 |
1.* | >= 1.0 < 2.0 | 1.0.0, 1.4.5, 1.9.9 |
1.2. * | >= 1.2 < 1.3 | 1.2.0, 1.2.3, 1.2.9 |
Eine ausführlichere Übersicht über die Versionseinschränkungen von Composer finden Sie in der offiziellen Dokumentation.
Schauen wir uns als nächstes an, wie Abhängigkeiten mit Composer automatisch geladen werden.
Da PHP selbst Klassen nicht automatisch lädt, bietet Composer ein Autoload-Skript, das Sie in Ihr Projekt aufnehmen können, damit das automatische Laden für Ihr Projekt funktioniert. Diese Datei wird von Composer automatisch generiert, wenn Sie Ihre erste Abhängigkeit hinzufügen.
Das einzige, was Sie tun müssen, ist, die Datei vendor/autoload.php
vor jeder Klasseninstanziierung in Ihre PHP-Skripte aufzunehmen.
Probieren wir es in unserer Demo-Anwendung aus. Öffnen Sie eine neue Datei mit dem Namen test.php
in Ihrem Texteditor:
- nano test.php
Fügen Sie den folgenden Code hinzu, der die Datei vendor/autoload.php
einbringt, die Abhängigkeit cocur/slugify
lädt und daraus einen Slug erstellt:
<?php
require __DIR__ . '/vendor/autoload.php';
use Cocur\Slugify\Slugify;
$slugify = new Slugify();
echo $slugify->slugify('Hello World, this is a long sentence and I need to make a slug from it!');
Speichern Sie die Datei und beenden Sie den Editor.
Führen Sie das Skript jetzt aus:
- php test.php
Dies erzeugt die Ausgabe hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it
.
Abhängigkeiten müssen aktualisiert werden, wenn neue Versionen herauskommen. Schauen wir uns also an, wie Sie damit umgehen können.
Wann immer Sie Ihre Projektabhängigkeiten auf neuere Versionen aktualisieren möchten, führen Sie den Befehl update
aus:
- composer update
Dadurch wird nach neueren Versionen der Bibliotheken gesucht, die Sie in Ihrem Projekt benötigt haben. Wenn eine neuere Version gefunden wird und mit der in der Datei composer.json
definierten Versionseinschränkung kompatibel ist, ersetzt Composer die zuvor installierte Version. Die Datei composer.lock
wird aktualisiert, um diese Änderungen widerzuspiegeln.
Sie können auch eine oder mehrere bestimmte Bibliotheken aktualisieren, indem Sie sie wie folgt angeben:
- composer update vendor/package vendor2/package2
Stellen Sie sicher, dass Sie die Dateien composer.json
und composer.lock
in Ihrem Versionskontrollsystem einchecken, nachdem Sie Ihre Abhängigkeiten aktualisiert haben, damit auch andere diese neueren Versionen installieren können.
Composer ist ein leistungsstarkes Tool, das die Verwaltung von Abhängigkeiten in PHP-Projekten erheblich erleichtern kann. Es bietet eine zuverlässige Möglichkeit, PHP-Pakete zu erkennen, zu installieren und zu aktualisieren, von denen ein Projekt abhängt. In diesem Leitfaden haben wir erfahren, wie man Composer installiert, neue Abhängigkeiten in ein Projekt aufnimmt und diese Abhängigkeiten aktualisiert, sobald neue Versionen verfügbar sind.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!