tl; dr
Apple a décidé de supprimer le fichier d'en-têtes /usr/include
et le macOS_SDK_headers_for_macOS_10.14.pkg
package. Pour installer Xdebug, vous devrez compiler manuellement Xdebug avec la référence correcte dans les deux phpize
et make
.
Pour plus de détails, j'ai écrit un article de blog sur le problème et la solution
Pour faire court, Apple a décidé de mettre à nu /usr/include
dans MacOS Catalina, qui a toujours été l'emplacement par défaut du fichier d'en-tête C dans les systèmes UNIX. Une tentative d'installation via PEAR / PECL retournera une erreur car le compilateur recherchera le fichier d'en-têtes nécessaire dans /usr/include
. La solution consiste donc à compiler Xdebug manuellement, en spécifiant manuellement l'emplacement réel des fichiers d'en-tête, qui sont toujours fournis par Xcode, juste à un emplacement différent.
Tout d'abord, assurez-vous que Xcode est installé, y compris les outils de ligne de commande. La commande suivante affichera l'emplacement du SDK par défaut:
$ xcrun --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
L'en-tête que vous souhaitez ( php.h
) sera alors /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main
.
Obtenir la source
Compilons 2.7.2 , obtenant le code source de git. Alternativement, vous pouvez télécharger la source depuis le site Xdebug .
git clone https://github.com/xdebug/xdebug.git
cd xdebug
git checkout tags/2.7.2
phpize
Ensuite, nous devons faire une copie phpize
afin de pouvoir modifier le chemin d'inclusion:
cp /usr/bin/phpize .
nano ./phpize
Trouvez cette ligne:
includedir="`eval echo ${prefix}/include`/php"
... et remplacez-le par cette ligne:
includedir="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php"
Exécuter phpize
:
./phpize
Vous devriez maintenant voir quelque chose comme ceci:
Configuring for:
PHP Api Version: 20180731
Zend Module Api No: 20180731
Zend Extension Api No: 320180731
Configurer et construire
Nous pouvons maintenant configurer:
./configure --enable-xdebug
... et exécutez make en utilisant notre emplacement SDK personnalisé défini comme drapeaux de compilation:
make CPPFLAGS='-I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/main -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/TSRM -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/Zend -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/ext -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php/ext/date/lib'
Pourrait voir un avertissement, ignorez-le pour l'instant. Enfin, nous devons exécuter:
make install
Encore une fois, cette commande échouera car elle ne peut pas déplacer l'extension au bon endroit. SIP l'empêchera. Mais pas de soucis, nous nous en occuperons manuellement à la prochaine étape. make install est toujours requis car il signera le fichier * .so.
Prise en charge activée en PHP
Ensuite, nous déplaçons l'exécutable dans un endroit sûr. J'utilise /usr/local/php/extensions
.
sudo mkdir -p /usr/local/php/extensions
sudo cp /usr/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so /usr/local/php/extensions
Ensuite, nous éditons la configuration PHP pour activer Xdebug. Modifiez simplement php.ini
:
sudo nano /etc/php.ini
Et nous ajoutons ce qui suit en bas:
[xdebug]
zend_extension=/usr/local/php/extensions/xdebug.so
xdebug.remote_enable=on
xdebug.remote_log="/var/log/xdebug.log"
xdebug.remote_host=localhost
xdebug.remote_handler=dbgp
xdebug.remote_port=9000
Redémarrez le serveur intégré pour être sûr:
sudo apachectl restart
Et enfin tester tout s'est bien passé:
php -i | grep "xdebug support"
Si la commande ci-dessus ne renvoie rien, alors Xdebug n'est pas disponible sur votre installation. Revenez en arrière pour découvrir ce qui manque.
ÉDITER
Une solution plus complète consisterait à modifier le résultat de php-config --include-dir
, qui revient /usr/include/php
. Cela permettrait à toute installation de trouver les fichiers d'en-tête nécessaires sans avoir à modifier manuellement les fichiers ou les indicateurs du compilateur.