web-dev-qa-db-fra.com

Installation de Xdebug sur MacOS Catalina 10.15

J'ai essayé d'installer Xdebug sur OS X 10.15 et je rencontre le problème suivant:

/private/tmp/pear/install/xdebug/xdebug.c:25:10: erreur fatale: fichier 'php.h' introuvable

J'ai essayé de résoudre le problème comme décrit ici: Installation de xdebug sur MacOs Mojave - fichier 'php.h' introuvable

Malheureusement, les fichiers d'en-tête sont introuvables dans ce répertoire: /Library/Developer/CommandLineTools/Packages

Toutes les idées où je peux obtenir les fichiers d'en-tête actuels pour OS X 10.15?

13
Guenter

tl; dr

Apple a décidé de supprimer le fichier d'en-têtes dans /usr/include et le macOS_SDK_headers_for_macOS_10.14.pkg paquet. Pour installer Xdebug, vous devrez compiler manuellement Xdebug avec la référence correcte dans 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 nuke /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. Essayer d'installer 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 voudrez (php.h) sera alors dans /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 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 que nous puissions 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écutez 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 à l'étape suivante. Make install est toujours nécessaire 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 renvoie /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.

22
Louis Charette

Si vous utilisez brew, je résous ce problème en réinstallant php et en reliant:

brew reinstall [email protected]
brew link --overwrite php
0
jamespsterling

vous pouvez trouver des instructions détaillées avec des correctifs prêts à l'emploi sur ce site: https://profilingviewer.com/installing-xdebug-on-catalina.html

0
user24525