web-dev-qa-db-fra.com

Xdebug sur macOS 10.13 avec PHP 7

Donc, macOS High Sierra 10.13 est maintenant livré avec PHP 7.1. Lors de la configuration d'Apache, j'ai également créé un nouveau /etc/php.ini à partir du fichier /etc/php.ini.default, en vérifiant que celui-ci était chargé par PHP après le redémarrage d'Apache. Toutefois, la version de l'extension Xdebug fournie avec macOS 10.13 ne semble pas se charger. ou présentez-vous lorsque vous exécutez phpinfo();

Mon php.ini est définitivement en cours de chargement:

$ php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

Voici à quoi ressemble mon fichier /etc/php.ini où je configure Xdebug:

[xdebug]    
zend_extension = "/usr/lib/php/extensions/no-debug-non-zts-20160303/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

[Mise à jour, corrigé cette faute de frappe ici ...]

Cependant, Xdebug ne charge pas et vérifie que php -i ne donne aucun résultat:

$php -i | grep xdebug
PHP Warning:  Method xdebug_start_function_monitor() cannot be a NULL 
    function in Unknown on line 0
    PHP Warning:  xdebug: Unable to register functions, unable to load in Unknown on line 0
    Segmentation fault: 11

Et oui, le chemin d'accès au fichier est correct:

$ ls /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so*

Cela fonctionnait auparavant sur PHP 5, j'espère donc que quelqu'un pourra m'aider et aider quiconque à l'avenir à lutter contre ce problème.

Lorsque je consulte mon journal Apache, le message d'erreur suivant s'affiche:

Failed loading /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so:  dlopen(/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so, 9): Symbol not found: _xdebug_monitored_function_dtor
  Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
  Expected in: flat namespace
 in /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so

Je ne fais pas de progrès en ce qui concerne la résolution de cette erreur:

Symbol not found: _xdebug_monitored_function_dtor
7
Gerard de Jong

Ok, je me suis finalement mis à courir moi-même cela fonctionne parfaitement! Je suppose que le binaire xdebug fourni avec macOS High Sierra (disponible sous: /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so) n'est pas compatible avec le nouveau moteur Zend de PHP7.

J'ai donc téléchargé la dernière source du site Web xdebug et j'ai procédé comme suit:

  1. Installé autoconf avec infusion;
  2. Exécutez phpize pour configurer la construction du nouveau moteur Zend;
  3. Exécuter ./configure
  4. Exécuter make

Maintenant, le nouveau binaire est sous modules/xdebug.so

Cependant, la protection SIP (System Integrity Protection) de macOS vous empêchera de remplacer le xdebug.so sous /usr/lib/php/extensions/. Je ne voulais pas désactiver ceci, alors j'ai créé un nouveau chemin de répertoire sous /usr/local/lib/php/extensions/ et copié le nouveau fichier binaire à cet emplacement. Je ne sais pas si ce répertoire est le meilleur endroit pour le mettre ou si c'est une mauvaise pratique, mais cela a fonctionné pour moi.

Finalement, j'ai reconfiguré mon php.ini pour utiliser le nouveau binaire et tout a fonctionné parfaitement!

15
Gerard de Jong

Pour l'installer, vous devez avoir des outils de ligne de commande xcode.

Donc, vous devez exécuter:

xcode-select --install

Ensuite, vous devez installer autoconf:

brew install autoconf

Ensuite, vous devez télécharger le code à partir d’ici. Après cela, vous devez vous lancer dans le dossier du code source:

  1. phpize
  2. ./configure
  3. make
  4. Sudo cp modules/xdebug.so /usr/local/php/extensions (si le répertoire n'existe pas, allez le créer)

Et enfin, dans php.ini, ajouter

zend_extension=/usr/local/php/extensions/xdebug.so

Après cela, vous pouvez activer xdebug dans php.ini et redémarrer Apache

Sudo apachectl restart
7

vous avez fait une faute de frappe dans "zend_extention". cela devrait être zend_extension . et je pense que le chemin complet est inutile zend_extension = xdebug.so .__ devrait suffire

3
user24525

Pour tous ceux qui arrivent tard à cette soirée, la tentative initiale de la question semble bien fonctionner sous macOS 10.13.6

0
Fuzzy76