tl; dr
Apple a décidé de supprimer le fichier d'en-têtes /usr/includeet le macOS_SDK_headers_for_macOS_10.14.pkgpackage. Pour installer Xdebug, vous devrez compiler manuellement Xdebug avec la référence correcte dans les deux phpizeet 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/includedans 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 phpizeafin 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.