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.
make install
toutes les étapes du chapitre "Prise en charge activée en PHP" de ce post. Gardez à l'esprit que vous pouvez avoir unphp.ini
fichier à un emplacement différent. Exécutezphp --ini
pour savoir où et modifier celui qui est utilisé à la place../configure
commande. Je reçois toujours unno such file or directory: ./configure
. Quelqu'un d'autre a-t-il rencontré cela ou suis-je juste le chanceux? : DSi vous utilisez brew, je résous ce problème en réinstallant php et en reliant:
la source
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
la source
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.
la source
brew install php
je l' ai fait, mais j'obtiens toujours la même erreur.pecl install xdebug
travaillé pour moi sous 10.15.3