Installation de Xdebug sur MacOS Catalina 10.15


13

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?

Réponses:


28

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.


1
Réponse la plus précieuse! Cela devrait être marqué comme correct! Merci Monsieur!
eltomato

VOUS AVEZ ENREGISTRÉ MA JOURNÉE
ludovico

C'est le meilleur moyen de résoudre le problème. Ça a marché pour moi. Merci, Louis
Raja Mohammed

1
Pour la prise en charge de PHP 7.4, vous devez installer XDebug 2.9 (et non 2.7.2). Suivez simplement ces instructions d'installation et après make installtoutes les étapes du chapitre "Prise en charge activée en PHP" de ce post. Gardez à l'esprit que vous pouvez avoir un php.inifichier à un emplacement différent. Exécutez php --inipour savoir où et modifier celui qui est utilisé à la place.
Dejv

J'étais bon jusqu'à la ./configurecommande. Je reçois toujours un no such file or directory: ./configure. Quelqu'un d'autre a-t-il rencontré cela ou suis-je juste le chanceux? : D
cbloss793

0

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

brew reinstall php@7.3
brew link --overwrite php

Ça n'a pas marché, mec.
Eric Chen

Malheureusement, les éléments de brassage ne fonctionnent pas toujours comme prévu, selon vos versions.
jamespsterling


-2

Je vous recommande d'utiliser "brew" pour installer PHP, puis d'utiliser l'outil "pecl" fourni avec la version installée de PHP de brew pour installer Xdebug.


C'est exactement ce que j'ai fait. Lorsque j'essaie d'installer Xdebug avec pecl, j'obtiens l'erreur mentionnée ci-dessus
Guenter

1
Cela signifie qu'il récupère le mauvais outil pecl - celui installé avec votre Mac. Vous devez vous assurer d'utiliser le breuvage fourni.
Derick

@Guenter est-ce que cet indice a résolu votre problème? J'ai le même problème et brew install phpje l' ai fait, mais j'obtiens toujours la même erreur.
Carter Pape

Merci @Derick, cela a résolu mon problème
Guenter

1
pecl install xdebugtravaillé pour moi sous 10.15.3
Juanmi Sosso
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.