Depuis la mise à jour MacOS Monterey (v12+) et pour toutes les versions à venir, Apple ne fournit plus de binaire PHP installé par défaut.
Si vous utilisez composer par exemple pour l’un de vos scripts ou plugin, voici le message d’erreur que vous pouvez obtenir:
composer update --no-plugins --no-scripts
env: php: No such file or directory
J’ai tenté pas mal de solutions, comme installer PHP avec brew
mais cela n’a pas résolu le problème.
Error: Permission denied @ apply2files
C’est l’une des erreurs obtenues lors de l’installation de paquets avec brew
, directement après la mise à jour vers Monterey:
Error: Permission denied @ apply2files - /usr/local/lib/node_modules/npm/node_modules/.bin/node-gyp
Code language: JavaScript (javascript)
Si cela vous arrive, c’est un problème de permissions sur le répertoire /user/local
, la solution est simple, il faut redonner les bonnes permissions à votre utilisateur avec cette commande:
sudo chown -R $(whoami):admin /usr/local
Code language: JavaScript (javascript)
Voilà déjà un problème réglé.
Installer composer sous MacOS Monterey
La véritable solution, toute simple finalement, est de réinstaller composer
, qui se charge alors d’installer la version idoine de PHP.
On installe composer avec brew:
brew install composer
Résultat:
==> Downloading https:
Already downloaded: /Users/matt/Library/Caches/Homebrew/downloads/6dba7b955c116a258cc340994e9e9ed7dfdfe3ab7668f0f9adb5dfcdaaf303a2--php-8.1.0.bottle_manifest.json
==> Downloading https:
==> Downloading from https:
==> Downloading https:
==> Downloading https:
==> Downloading from https:
==> Installing dependencies for composer: php
==> Installing composer dependency: php
==> Pouring php--8.1.0.monterey.bottle.tar.gz
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set php_ini /usr/local/etc/php/8.1/php.ini system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set php_dir /usr/local/share/pear system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set doc_dir /usr/local/share/pear/doc system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set ext_dir /usr/local/lib/php/pecl/20210902 system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set bin_dir /usr/local/opt/php/bin system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set data_dir /usr/local/share/pear/data system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set cfg_dir /usr/local/share/pear/cfg system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set www_dir /usr/local/share/pear/htdocs system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set man_dir /usr/local/share/man system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set test_dir /usr/local/share/pear/test system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set php_bin /usr/local/opt/php/bin/php system
==> /usr/local/Cellar/php/8.1.0/bin/pear update-channels
🍺 /usr/local/Cellar/php/8.1.0: 512 files, 79.9MB
==> Installing composer
==> Pouring composer--2.1.14.monterey.bottle.tar.gz
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/composer
Target /usr/local/bin/composer
already exists. You may want to remove it:
rm '/usr/local/bin/composer'
To force the link and overwrite all conflicting files:
brew link --overwrite composer
To list all files that would be deleted:
brew link --overwrite --dry-run composer
Possible conflicting files are:
/usr/local/bin/composer
==> Summary
🍺 /usr/local/Cellar/composer/2.1.14: 3 files, 2.2MB
==> Running `brew cleanup composer`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
Code language: PHP (php)
Comme vous pouvez le constater dans les résultats précédents, le lien symbolique n’a pas été créé correctement donc nous allons le corriger à la main.
On teste notre commande avec --dr-run
d’abord:
brew link --overwrite --dry-run composer
Would remove:
/usr/local/bin/composer
Code language: JavaScript (javascript)
Tout semble bon, on crée le lien symbolique:
brew link --overwrite composer
Linking /usr/local/Cellar/composer/2.1.14... 1 symlinks created.
On reteste maintenant notre mise à jour de plugin via composer
:
composer update --no-plugins --no-scripts
Loading composer repositories with package information
Updating dependencies
Nothing to modify in lock file
Writing lock file
Installing dependencies from lock file (including require-dev)
Nothing to install, update or remove
Generating autoload files
Code language: JavaScript (javascript)
Impeccable, composer
et php
sont de nouveau opérationnels sous Monterey.