web-dev-qa-db-ja.com

Xdebugエラー:「xdebug.soの読み込みに失敗しました:xdebug.so:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません」

私は最近、サーバーにxdebugをインストールしましたが、その使用を、独自のphp.iniファイルを使用するテストサイトに制限しました。

たとえば、テストサイトphp.iniは次の場所にあります。

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

このphp.iniファイル内に、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"

さて、問題はxdebug worksで問題ありません。

ただし、メインサイトでは、独自のphp.iniファイルもあり、たとえば次の場所にあります。

/home/main_site/public_html/php.ini

このファイル内には、xdebugの何もありません。

現在、cpanelでmain site用に次のようなcronを設定しています。

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

ここで、ログファイル内のcronの出力を確認すると、出力が得られます。

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

メインサイトがxdebugをロードすべきではないのに、なぜこのエラーが発生するのですか?

14
Brett

2つのサイトを分割して2つの異なるphp.iniファイルを使用している場合でも、CRONは、PHP-CLIが使用するように構成されているphp.iniファイルを使用します。したがって、どのphp.ini CRONが使用されているかを把握するには、次のコマンドを使用します。

php -i | grep php.ini

PHP-CLIが、使用するはずのないphp.iniファイル(/usr/local/lib/php.iniなど)を使用している場合、それが、Xdebugエラーがログ。

/usr/local/lib/php.iniファイルには、次の2つの値が設定されていることがわかります。

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

Zend_extensionsにはモジュールへのフルパスが必要なため、CRON(PHP-CLIなど)によって実行されたphpスクリプトからのエラーが原因でした。これはXdebugのドキュメントにも記載されています。 http://xdebug.org/docs/install

したがって、エラーを取り除くには、その行をコメント化する(または削除する)だけです。次のような他のモジュールをロードしない限り、extension_dir行をコメント化または削除することもできます。

extension = memcached.so 
17
dcarrith

Php.iniでパスを指定するか、mods-availableでlibを追加することにより、XDebugライブラリがロードされる場所から難しい場合があります。

まず、実行します:

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

これにより、拡張機能をロードするファイルが提供されます。

次に、使用されているphp.iniを特定します。

$ php -i | grep php.ini

これにより、使用中のphpバージョンが表示されます(複数のphpバージョンがある場合)。次に、phpバージョンを最初のステップの結果にリンクします。

ここで、xdebug拡張機能が読み込まれる行をコメント化するか、/ xdebug.iniファイル(拡張機能を読み込む)を/ etc/php/xx/mods-available(xxは使用中のphpバージョンを表す)から削除する必要があります)。

3
SimionZ

参考までに、Linux Mintと私は一部のUbuntuシステムで考えています。 php.iniを変更するには、/ etc/php/7.0/cli/conf.dに移動してxdebug.iniを探し、上記の投稿にある行を変更する必要があります。 。

2
antoiba86