web-dev-qa-db-fra.com

Erreur Xdebug: «Échec du chargement de xdebug.so: xdebug.so: impossible d'ouvrir le fichier d'objet partagé: aucun fichier ou répertoire de ce type»

J'ai récemment installé xdebug sur mon serveur, mais j'ai limité son utilisation à notre site de test, qui utilise son propre php.ini fichier.

Par exemple, les sites de test php.ini est situé à:

/home/test_site/public_html/subdomain_name/php.ini

À l'intérieur de ce php.ini fichier J'ai ce qui suit pour xdebug:

[XDebug]
zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so

xdebug.profiler_append = 0

xdebug.profiler_enable = 1

xdebug.profiler_enable_trigger = 0

xdebug.profiler_output_dir = /home/test_site/xdebug

xdebug.profiler_output_name = "cachegrind.out.%s-%u.%h_%r"

Maintenant, la chose est, xdebug fonctionne bien, aucun problème.

Cependant, sur notre site principal, qui possède également son propre php.ini fichier, qui se trouve par exemple à:

/home/main_site/public_html/php.ini

Dans ce fichier, je n'ai rien pour xdebug là-dedans.

Maintenant, j'ai récemment installé un cron dans cpanel pour le main site tel que:

php -f /home/main_site/public_html/cron_jobs/main_cron.php > /home/main_site/public_html/logs/main_cron.log 2>&1

Maintenant, après avoir vérifié la sortie du cron dans le fichier journal, j'obtiens la sortie:

Failed loading xdebug.so:  xdebug.so: cannot open shared object file: No such file or directory

Pourquoi ai-je cette erreur alors que le site principal ne devrait même pas charger xdebug?

14
Brett

Même si les deux sites sont divisés et utilisent deux fichiers php.ini différents, CRON utilisera toujours le fichier php.ini que PHP-CLI est configuré pour utiliser. Donc, pour savoir quel php.ini CRON utilise, voici la commande à utiliser:

php -i | grep php.ini

Si PHP-CLI utilise un fichier php.ini que vous ne vous attendiez pas à utiliser (tel que /usr/local/lib/php.ini) alors ce sera la clé pour comprendre pourquoi vous voyez des erreurs Xdebug dans les journaux.

Il s'avère que le /usr/local/lib/php.ini fichier avait ces deux valeurs définies:

extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20090626"
zend_extension = "xdebug.so"

Cela provoquait l'erreur du script php qui était exécuté par CRON (c'est-à-dire PHP-CLI) car zend_extensions a besoin du chemin complet vers le module. Ceci est également indiqué dans la documentation Xdebug: http://xdebug.org/docs/install

Donc, pour vous débarrasser de l'erreur, commentez cette ligne (ou supprimez-la simplement). Vous pouvez également commenter ou supprimer le extension_dir line tant que vous ne chargez aucun autre module tel que:

extension = memcached.so 
17
dcarrith

Parfois, il peut être difficile de charger la bibliothèque XDebug car cela peut être fait en spécifiant le chemin dans php.ini ou en ajoutant la lib dans mods-available.

Tout d'abord, exécutez:

$ Sudo grep 'xdebug' -r /etc/php/*

Cela vous donnera les fichiers qui chargent l'extension.

Identifiez maintenant quel php.ini est utilisé:

$ php -i | grep php.ini

Cela vous donnera la version php utilisée (dans le cas où vous avez plusieurs versions php). Liez maintenant la version php avec le résultat de la première étape.

Maintenant, vous devez commenter la ligne où l'extension xdebug est chargée ou supprimer le fichier xdebug.ini (qui charge l'extension) de/etc/php/xx/mods-available (où xx représente la version php utilisée) ).

3
SimionZ

Pour mémoire, dans Linux Mint et je pense dans certains systèmes Ubuntu. Pour changer le php.ini, il vaut mieux aller dans / etc/php/7.0/cli/conf.d et chercher le xdebug.ini et vous devez changer les lignes dites dans le post ci-dessus le mien .

2
antoiba86