PHP : Composer
Composer gère les dépendances d’un projet PHP, sur le modèle de npm.
Installer
Section intitulée « Installer »sudo apt install composercomposer --versionLe 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.
Démarrer un projet
Section intitulée « Démarrer un projet »mkdir monprojet && cd monprojetcomposer initcomposer require monolog/monologFichiers 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/Gérer les dépendances
Section intitulée « Gérer les dépendances »composer require guzzlehttp/guzzle # ajoutercomposer require --dev phpunit/phpunit # dépendance de développementcomposer remove guzzlehttp/guzzle # retirercomposer install # installe selon composer.lockcomposer update # met à jour dans les limites de composer.jsoncomposer update monolog/monolog # un seul paquetcomposer outdated # paquets périméscomposer show # paquets installéscomposer why monolog/monolog # pourquoi ce paquet est présentcomposer audit # vulnérabilités connuescomposer install (et non update) sur les serveurs et en CI : il respecte composer.lock, donc les mêmes versions partout.
Contraintes de version
Section intitulée « Contraintes de version »| 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 |
Autoload PSR-4
Section intitulée « Autoload PSR-4 »composer.json :
{ "require": { "php": ">=8.3" }, "autoload": { "psr-4": { "App\\": "src/" } }}composer dump-autoloadUtilisation :
<?phprequire __DIR__ . '/vendor/autoload.php';
use App\Service\Calcul;
$calcul = new Calcul();La classe App\Service\Calcul se trouve alors dans src/Service/Calcul.php.
Contrainte de plateforme
Section intitulée « Contrainte de plateforme »{ "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" }}composer testcomposer serveEn production
Section intitulée « En production »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) |
Dépannage
Section intitulée « Dépannage »| 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 »).