J'utilise mon Mac pour développer trois projets: une application Android, une application iPhone et un projet Symfony.
Mon projet Symfony utilise les extensions Redis et APCu. Cela a été installé (il y a 6 mois) via PECL en utilisant:
Sudo pecl install redis
et
Sudo pecl install apcu
Hier, après avoir mis à jour mon Mac vers Mojave et essayé de démarrer le serveur Web intégré de PHP comme d'habitude, le message d'erreur suivant s'affiche:
Vous avez tenté de charger la classe "Redis" à partir de l'espace de noms global. As tu oublier une déclaration "use"?
J'ai également remarqué que php.ini
avait été supprimé lors de l'installation. J'ai donc utilisé le php.ini-previous
pour générer à nouveau le php.ini
.
Également réinstallé les outils de ligne de commande (a été supprimé lors de l'installation):
xcode-select --install
Et finalement, j'ai essayé d'installer le redis extenison via PECL, encore une fois:
Sudo pecl install redis
Cette fois, PECL génère une erreur:
creating libtool
appending configuration tag "CXX" to libtool
configure: creating ./config.status
config.status: creating config.h
running: make
/bin/sh /private/tmp/pear/temp/pear-build-root1vQ0zO/redis-4.1.1/libtool --mode=compile cc -I. -I/private/tmp/pear/temp/redis -DPHP_ATOM_INC -I/private/tmp/pear/temp/pear-build-root1vQ0zO/redis-4.1.1/include -I/private/tmp/pear/temp/pear-build-root1vQ0zO/redis-4.1.1/main -I/private/tmp/pear/temp/redis -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /private/tmp/pear/temp/redis/redis.c -o redis.lo
mkdir .libs
cc -I. -I/private/tmp/pear/temp/redis -DPHP_ATOM_INC -I/private/tmp/pear/temp/pear-build-root1vQ0zO/redis-4.1.1/include -I/private/tmp/pear/temp/pear-build-root1vQ0zO/redis-4.1.1/main -I/private/tmp/pear/temp/redis -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /private/tmp/pear/temp/redis/redis.c -fno-common -DPIC -o .libs/redis.o
In file included from /private/tmp/pear/temp/redis/redis.c:27:
/private/tmp/pear/temp/redis/common.h:1:10: fatal error: 'php.h' file not found
#include "php.h"
^~~~~~~
1 error generated.
make: *** [redis.lo] Error 1
ERROR: `make' failed
Comment peut résoudre ce problème?
L'exécution de la commande suivante réinstallera les fichiers d'en-tête des outils de développement et résoudra le problème.
$ Sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
Vous voudrez faire
$ locate php.h
les résultats devraient être quelque chose comme:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main/php.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php/main/php.h
Ensuite, vous voudrez désactiver SIP afin que vous puissiez créer un dossier dans /usr/include
et lier de façon symétrique les dépendances du développeur php à ce dossier. Vous devez démarrer la récupération pour le faire; redémarrez votre machine puis maintenez cmd + R
pendant son redémarrage, sélectionnez terminal dans le menu utilitaires.
exécuter # csrutil disable && shutdown -r now
cela désactive SIP et redémarre votre ordinateur.
Une fois que vous avez démarré, vous aurez envie de créer le dossier dont nous avons parlé comme suit: Sudo mkdir /usr/include
ensuite, nous créons un lien symbolique à l'endroit où se trouvent les fichiers de développement php
$ ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php /usr/include
Vous devrez toujours activer SIP, alors démarrez en mode de récupération cette fois-ci
# csrutil enable && shutdown -r now
, et c'est tout.