J’ai récemment joué avec Composer pour gérer les dépendances d’un plugin WordPress, et il faut reconnaître que l’outil simplifie énormément la gestion du code tiers.
Lors d’un changement de Mac, après import de mes anciennes données sur une nouvelle machine, j’ai obtenu ce message d’erreur :
Composer: file_put_contents(./composer.json): failed to open stream: Permission deniedCode language: HTTP (http)
Cette erreur signifie que Composer essaie d’écrire dans composer.json, ou dans le dossier courant, mais que l’utilisateur qui exécute la commande n’a pas les droits nécessaires.
Le problème peut venir du dossier du projet, du fichier composer.json, du cache Composer, du dossier global Composer, ou d’un ancien usage de sudo composer qui a laissé des fichiers appartenant à root.
Comprendre l’erreur
Le message important est :
failed to open stream: Permission denied
Composer n’arrive pas à écrire dans le fichier demandé. Dans l’exemple :
file_put_contents(./composer.json)
Composer tente d’écrire dans composer.json, dans le dossier courant.
Cela arrive souvent après :
- une migration de Mac ou de PC ;
- une restauration depuis une sauvegarde ;
- un changement d’utilisateur système ;
- une commande Composer lancée avec
sudo; - un projet copié depuis un autre compte ;
- un dossier synchronisé via Dropbox, iCloud, NAS ou disque externe ;
- un projet créé dans un dossier appartenant à
rootou à un autre utilisateur.
Donc avant de corriger au marteau, on vérifie exactement quel dossier pose problème. Le marteau marche, certes, mais il a une mauvaise finesse de diagnostic.