Tutorial

Installieren und Verwenden von Composer unter Ubuntu 20.04

UbuntuPHPUbuntu 20.04

Einführung

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.

Voraussetzungen

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.

Schritt 1 — Installieren von PHP und zusätzlichen Abhängigkeiten

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.

Schritt 2 — Herunterladen und Installieren von Composer

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
Output
e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a

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:

Output
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:

Output
All 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.

Schritt 3 — Verwenden von Composer in einem PHP-Projekt

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:

  • Identifizieren Sie, welche Art von Bibliothek die Anwendung benötigt.
  • Suchen Sie auf Packagist.org, dem offiziellen Paket-Repository für Composer, nach einer geeigneten Open Source-Bibliothek.
  • Wählen Sie das Paket, von dem Sie eine Abhängigkeit haben möchten.
  • Führen Sie 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:

Packagist-Suchergebnisse für den Begriff „slug“

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
Output
Using 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
Output
Sorting... 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
Output
Using 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
Output
total 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.

Schritt 4 - Einschließen des Autoload-Skripts

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:

test.php
<?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.

Schritt 5 — Aktualisieren von Projektabhängigkeiten

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.

Zusammenfassung

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.

0 Comments

Creative Commons License