Xdebug 错误:“加载 xdebug.so 失败:xdebug.so:无法打开共享对象文件:没有这样的文件或目录”
Posted
技术标签:
【中文标题】Xdebug 错误:“加载 xdebug.so 失败:xdebug.so:无法打开共享对象文件:没有这样的文件或目录”【英文标题】:Xdebug Error: "Failed loading xdebug.so: xdebug.so: cannot open shared object file: No such file or directory" 【发布时间】:2014-06-17 23:52:20 【问题描述】:我最近在我的服务器上安装了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 工作很好,没有问题。
但是,在我们的主站点上,它也有自己的 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 时,为什么我会收到此错误?
【问题讨论】:
您可能需要仔细检查您用于运行 main_cron.php 脚本的 php-cli 版本是否未使用其中包含 xdebug 配置的 php.ini。php -i | grep xdebug
应该告诉你。然后,php -i | grep php.ini
应该会显示 php-cli 配置为使用哪个 php.ini。
请尝试which php
找出执行脚本的PHP版本路径。
@dcarrith 当我运行php -i | grep xdebug
时,我得到了Failed loading xdebug.so: xdebug.so: cannot open shared object file: No such file or directory
。当我运行php -i | grep php.ini
时,我收到了相同的错误消息以及Configuration File (php.ini) Path => /usr/local/lib ... Loaded Configuration File => /usr/local/lib/php.ini
@KraneBird /usr/local/bin/php
@Brett - 你检查过/usr/local/lib/php.ini
看看那里是否有zend_extension=xdebug.so
吗?您可能只需将 extension_dir
设置为存储 xdebug.so 的位置。 sudo find / -name xdebug.so
找到它。然后,当然要重启 Apache。
【参考方案1】:
即使您将两个站点分开并使用两个不同的 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
文件设置了这两个值:
extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20090626"
zend_extension = "xdebug.so"
这导致 CRON(即 PHP-CLI)运行的 php 脚本出错,因为 zend_extensions 需要模块的完整路径。 Xdebug 文档中也说明了这一点:http://xdebug.org/docs/install
所以,要摆脱错误,只需注释掉该行(或删除它)。只要您不加载任何其他模块,您也可以注释掉或删除 extension_dir
行,例如:
extension = memcached.so
【讨论】:
【参考方案2】:有时从 XDebug 库的加载位置可能会很困难,因为它可以通过在 php.ini 中指定路径或通过在 mods-available 中添加库来完成。
首先,运行:
$ sudo grep 'xdebug' -r /etc/php/*
这将为您提供加载扩展的文件。
现在确定正在使用的 php.ini:
$ php -i | grep php.ini
这将为您提供正在使用的 php 版本(如果您有多个 php 版本)。现在将 php 版本与第一步的结果链接起来。
现在,要么您必须注释掉加载 xdebug 扩展的行,要么从 /etc/php/xx/mods-available 中删除 xdebug.ini 文件(加载扩展)(其中 xx 代表 php正在使用的版本)。
【讨论】:
【参考方案3】:作为记录,在 Linux Mint 中,我认为在某些 Ubuntu 系统中。要更改 php.ini,最好转到 /etc/php/7.0/cli/conf.d 并查找 xdebug.ini,您必须更改我上面帖子中所说的行.
【讨论】:
【参考方案4】:我在下面的 Linux 中尝试过并且工作正常,
您可以使用以下命令来定位 xdebug.so 文件路径
locate xdebug.so
ex: /usr/lib/php/20160303/xdebug.so
使用以下命令定位当前的 php.ini 文件
php -i | grep php.ini
ex:
Configuration File (php.ini) Path => /etc/php/7.1/cli
Loaded Configuration File => /etc/php/7.1/cli/php.ini
之后将下面的 xdebug 配置添加到 cli 和 apache2 文件夹的 php.ini 文件中,并使用正确的 xdebug.so 文件路径。
vi /etc/php/7.1/cli/php.ini
vi /etc/php/7.1/apache2/php.ini
[xdebug]
zend_extension=/usr/lib/php/20190902/xdebug.so
xdebug.remote_enable = 1
xdebug.remote_port = 9000
xdebug.remote_autostart = 1
最后重启apache2服务器
sudo service apache2 restart
确保您在编辑器中使用了正确的 xdebug 端口!
干杯! :)
【讨论】:
【参考方案5】:我尝试了上面提到的所有过程,并且在谷歌搜索后对于this 和许多类似的过程,我仍然遇到了这个错误
$ php -i | grep php.ini
Failed loading /usr/lib/php/20200930/xdebug.so: /usr/lib/php/20200930/xdebug.so: undefined symbol: zend_get_properties_for
Configuration File (php.ini) Path => /etc/php/7.3/cli
Loaded Configuration File => /etc/php/7.3/cli/php.ini
我通过使用 Pecl 更新 Xdebug 解决了这个问题。如果您没有按照说明安装它here
$ pecl install xdebug
现在我更改了我的xdebug.ini
文件。你可以使用
$ locate xdebug.ini
将zend_extension = usr/lib/php/20180731/xdebug.so
添加到文件中。
xdebug.ini
[xdebug]
zend_extension = usr/lib/php/20180731/xdebug.so
最新版本的Xdebug 3.0.4 仍然使用这些usr/lib/php/20180731/xdebug.so
,但如果您尝试使用$ locate xdebug.so
,您会看到不同的文件位置。
Php 输出正确的 Zend Extensions
$ php -v
PHP 7.3.27-9+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Feb 23 2021 15:10:08) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.27, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.27-9+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies
with Xdebug v3.0.4, Copyright (c) 2002-2021, by Derick Rethans
【讨论】:
以上是关于Xdebug 错误:“加载 xdebug.so 失败:xdebug.so:无法打开共享对象文件:没有这样的文件或目录”的主要内容,如果未能解决你的问题,请参考以下文章
xdebug.start_start_with_request=yes 如果调试客户端没有监听,则没有错误
PHP 单元。错误:没有代码覆盖驱动程序可用。 (安装了xdebug)