2017-10-05 7 views
3

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, vérifié que PHP était en train de le charger après le redémarrage d'Apache, mais la version de l'extension Xdebug fournie avec macOS 10.13 ne semble pas charger ou apparaître quand vous exécutez phpinfo();Xdebug sur macOS 10.13 avec PHP 7

mon php.ini est certainement en cours de chargement:

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

Voici ce que mon /etc/php.ini ressemble à 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 , Fixe faute de frappe ici ...]

Cependant, Xdebug ne se charge pas et la vérification php -i donnent 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 vers le 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 sur PHP 5 donc j'espère que quelqu'un pourra m'aider, ainsi que quiconque dans le futur, à résoudre ce problème.

Quand je vérifie mon journal apache je reçois l'erreur suivante:

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 suis pas faire des progrès en termes de savoir comment je peux résoudre cette erreur:

Symbol not found: _xdebug_monitored_function_dtor 
+0

Notez qu'Apache * peut utiliser des php.ini différents (un php.ini est utilisé pour CLI/terminal et un pour Apache/web sever). Il est donc préférable de vérifier la sortie 'phpinfo()' capturée dans le navigateur pour voir ce que php.ini est utilisé et si xdebug est chargé. Bien sûr, s'ils utilisent tous deux le même fichier ini, ces vérifications peuvent être effectuées dans le terminal. Et oui - 'zend_extension' avec le chemin complet (plus sûr) – LazyOne

+0

Merci, j'ai vérifié à la fois CLI et le navigateur et ils sont tous les deux en train de charger le même fichier php.ini. –

Répondre

7

Ok donc je suis enfin moi-même en cours d'exécution, il fonctionne parfaitement! Je suppose que le binaire xdebug fourni avec macOS High Sierra (trouvé sous: /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so) n'est pas compatible avec le nouveau moteur Zend de PHP7.

Je téléchargé la dernière source à partir du xdebug website et a fait ce qui suit:

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

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

Toutefois, la protection de l'intégrité du système macOS (SIP) vous empêchera de l'écraser sous xdebug.so/usr/lib/php/extensions/. Je ne voulais pas désactiver cela, j'ai donc créé un nouveau chemin de répertoire sous /usr/local/lib/php/extensions/ et j'ai copié le nouveau binaire dans cet emplacement. Je ne suis pas sûr si ce répertoire est le meilleur endroit pour le mettre ou si c'est une mauvaise pratique, mais cela a fonctionné pour moi.

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

+0

J'ai cloné le dépôt git, et j'ai essayé de reproduire vos étapes 1-4. Mais je reçois un message d'erreur: erreur fatale: fichier 'php.h' pas trouvé – Mondy

+0

Je l'ai eu moi-même au début. Je ne peux pas me rappeler exactement ce qui a arrangé cela pour moi, je pense que c'était installer autoconf ou mettre à jour vers Xcode 9.0. Je pense que cela a dû être autoconf car cela a permis à mon compilateur de voir l'en-tête php.h qui, je suppose, est inclus dans la dernière installation de PHP. –

2

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 doit être assez

+0

Merci, cela m'a conduit à un nouveau problème que j'ai pu résoudre. Mise à jour de la question –

3

Pour l'installer, vous devez disposer d'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 from here. Après cela, vous devez exécuter dans le dossier de la 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 aller créer)

Et enfin 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