Introduction : quand PHP ne fait plus bon ménage avec Homebrew
\n\nAvez-vous déjà été confronté à une situation où tout fonctionnait parfaitement, puis soudainement — boum ! — votre script PHP préféré affiche une erreur qui vous fait dresser les cheveux sur la tête ? Si vous êtes développeur sur macOS et que vous avez récemment installé Node.js via Homebrew, vous avez probablement vu ce message menaçant :
\n\ndyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib\n Referenced from: /usr/local/bin/php\n Reason: image not found\n\nNe paniquez pas ! Ce n'est pas la fin du monde, mais simplement un conflit de versions de la bibliothèque ICU4C (International Components for Unicode for C). Cette situation est si courante que cette question a recueilli des milliers de vues sur Stack Overflow. Aujourd'hui, nous allons comprendre pourquoi cela se produit et, surtout, comment le corriger une fois pour toutes.
\n\nPourquoi l'erreur libicui18n.62.dylib se produit-elle ?
\n\nExaminons le mécanisme. ICU4C est une bibliothèque de support Unicode utilisée par PHP pour la gestion de l'internationalisation (fonctions comme intl, mbstring et autres). Lorsque vous installez PHP via Homebrew, il se lie à une version spécifique d'ICU4C qui était en vigueur au moment de l'installation.
Le problème survient lorsque vous installez (ou mettez à jour) Node.js via Brew. Node.js dépend également d'ICU4C, et Brew peut mettre à jour cette bibliothèque vers une nouvelle version, supprimant l'ancienne. En conséquence, PHP reste avec un « lien mort » vers le fichier libicui18n.62.dylib, qui n'existe plus. D'où l'erreur :
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib\n\n
Il s'agit essentiellement d'un conflit de dépendances classique. Mais la bonne nouvelle, c'est qu'il existe une solution, et elle est assez simple.
\n\nMéthodes de résolution : du simple au fiable
\n\nMéthode 1 : Reliaison d'ICU4C (correctif rapide)
\n\nLa méthode la plus rapide consiste à « rappeler » à PHP où se trouve désormais la bibliothèque. Homebrew stocke la version actuelle d'ICU4C à un autre endroit, mais nous pouvons créer un lien symbolique.
\n\n- \n
- Commencez par vérifier quelle version d'ICU4C est actuellement installée : \n
brew list --versions icu4c\n\nVous verrez quelque chose comme icu4c 72.1 (le numéro de version peut varier).
- \n
- Créez maintenant le répertoire que PHP recherche et faites un lien symbolique : \n
sudo mkdir -p /usr/local/opt/icu4c/lib\nsudo ln -s /usr/local/Cellar/icu4c/72.1/lib/libicui18n.dylib /usr/local/opt/icu4c/lib/libicui18n.62.dylib\n\nImportant : Remplacez 72.1 par votre version d'ICU4C. Si la version est 73.0, la commande sera :
sudo ln -s /usr/local/Cellar/icu4c/73.0/lib/libicui18n.dylib /usr/local/opt/icu4c/lib/libicui18n.62.dylib\n\nVérifiez si PHP fonctionne :
\n\nphp -v\n\nSi vous voyez la version de PHP sans erreur — bravo, vous avez gagné ! Mais c'est une solution temporaire. Lors de la prochaine mise à jour d'ICU4C, le lien se brisera à nouveau.
\n\nMéthode 2 : Réinstallation de PHP via Brew (recommandée)
\n\nUne approche plus correcte consiste à forcer PHP à se recompiler avec la version actuelle d'ICU4C. Cela prendra un peu plus de temps, mais résoudra le problème à la racine.
\n\n- \n
- Commencez par supprimer la version actuelle de PHP (si elle existe) : \n
brew uninstall php\n\n- \n
- Ensuite, réinstallez PHP en indiquant explicitement d'utiliser la version actuelle d'ICU4C : \n
brew install php\n\nHomebrew récupérera automatiquement la dernière version d'ICU4C et recompilera PHP avec les bons liens. Après l'installation, vérifiez :
\n\nphp -v\nphp -m | grep intl\n\nLe module intl doit figurer dans la liste. Si ce n'est pas le cas, il faudra peut-être l'activer manuellement dans php.ini, mais généralement Brew le fait automatiquement.