Aller au contenu

PHP : Composer

Composer gère les dépendances d’un projet PHP, sur le modèle de npm.

Fenêtre de terminal
sudo apt install composer
composer --version

Le paquet d’Ubuntu n’est pas toujours la dernière version. Pour la dernière version, suivre la procédure officielle de getcomposer.org/download (vérification de l’empreinte du script d’installation incluse) et ne pas exécuter un script téléchargé sans le vérifier.

Ne jamais exécuter Composer avec sudo pour un projet : les fichiers du dossier vendor/ appartiendraient à root.

Fenêtre de terminal
mkdir monprojet && cd monprojet
composer init
composer require monolog/monolog

Fichiers créés :

Fichier Rôle
composer.json Dépendances déclarées (à versionner)
composer.lock Versions exactes installées (à versionner)
vendor/ Bibliothèques installées (à ne pas versionner)

.gitignore :

/vendor/
Fenêtre de terminal
composer require guzzlehttp/guzzle # ajouter
composer require --dev phpunit/phpunit # dépendance de développement
composer remove guzzlehttp/guzzle # retirer
composer install # installe selon composer.lock
composer update # met à jour dans les limites de composer.json
composer update monolog/monolog # un seul paquet
composer outdated # paquets périmés
composer show # paquets installés
composer why monolog/monolog # pourquoi ce paquet est présent
composer audit # vulnérabilités connues

composer install (et non update) sur les serveurs et en CI : il respecte composer.lock, donc les mêmes versions partout.

Contrainte Signification
^3.5 >=3.5.0 <4.0.0 (compatible : usage courant)
~3.5.1 >=3.5.1 <3.6.0
3.* Toute version 3
>=3.0 <4.0 Intervalle explicite

composer.json :

{
"require": {
"php": ">=8.3"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
Fenêtre de terminal
composer dump-autoload

Utilisation :

<?php
require __DIR__ . '/vendor/autoload.php';
use App\Service\Calcul;
$calcul = new Calcul();

La classe App\Service\Calcul se trouve alors dans src/Service/Calcul.php.

{
"config": {
"platform": { "php": "8.3.0" }
}
}

Composer résout les dépendances comme si PHP valait 8.3.0 : utile pour que les versions installées en développement fonctionnent aussi sur un serveur Ubuntu 24.04, même si le poste de développement a une version plus récente.

{
"scripts": {
"test": "phpunit",
"serve": "php -S 127.0.0.1:8000 -t public"
}
}
Fenêtre de terminal
composer test
composer serve
Fenêtre de terminal
composer install --no-dev --optimize-autoloader
Option Effet
--no-dev Ne pas installer les dépendances de développement
--optimize-autoloader Autoload plus rapide (carte de classes)
Symptôme Piste
Your requirements could not be resolved to an installable set of packages Conflit de versions ou de version PHP : composer why-not vendor/paquet version
The zip extension and unzip/7z commands are both missing sudo apt install unzip php-zip
Class not found composer dump-autoload ; vérifier espace de noms et chemin PSR-4
Composer is running as root Ne pas utiliser sudo
Allowed memory size exhausted COMPOSER_MEMORY_LIMIT=-1 composer update
Fichiers de vendor/ appartenant à root sudo chown -R "$USER": vendor

Ubuntu 24.04 et 26.04 : différences à connaître

Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »

Composer fonctionne de la même manière avec PHP 8.3 et 8.5 ; certaines bibliothèques anciennes ne déclarent pas la compatibilité avec PHP 8.5 : composer update sélectionne alors des versions plus récentes, ou échoue (voir « Dépannage »).