是什么导致消息“加载/usr/lib/php/modules/xdebug.so失败”(“没有这样的文件或目录”)?

时间:2014-02-28 19:21:21

标签: php xdebug ini

当我运行php --version时(在CentOS版本6.4上),我得到:

# php --version
Failed loading /usr/lib/php/modules/xdebug.so:  /usr/lib/php/modules/xdebug.so: cannot open shared object file: No such file or directory
PHP 5.4.19 (cli) (built: Aug 22 2013 08:03:53)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
    with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

“加载失败的原因是什么/usr/lib/php/modules/xdebug.so:/usr/lib/php/modules/xdebug.so:无法打开共享对象文件:没有这样的文件或目录”消息?

我使用以下方法确认了我的php.ini文件的位置:

# php -a
Failed loading /usr/lib/php/modules/xdebug.so:  /usr/lib/php/modules/xdebug.so: cannot open shared object file: No such file or directory
Interactive shell

php > echo php_ini_loaded_file() . "\n";
/etc/php.ini

然后我在/etc/php.ini上搜索“/ usr / lib”:

# fgrep "/usr/lib" /etc/php.ini
zend_extension=/usr/lib64/php/modules/xdebug.so
extension_dir = "/usr/lib64/php/modules"

PHP似乎没有配置(在php.ini中)在/ usr / lib / php / modules /中查找xdebug.so。那么为什么我会收到该错误消息?

更新:为回应Sverri M. Olsen的评论,建议xdebug.so的路径可能需要修复,我做了:

# fgrep "xdebug" /etc/php.ini
zend_extension=/usr/lib64/php/modules/xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=vmhostmachine
xdebug.remote_port=9000
xdebug.profiler_enable=1
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_dir=/usr/xdebug
xdebug.profiler_append=1
xdebug.auto_trace=1
xdebug.trace_format=1
xdebug.collect_params=4
xdebug.collect_return=1
xdebug.trace_output_dir=/usr/xdebug
xdebug.trace_output_name=trace.%H.%t
xdebug.profiler_output_name=profile.%H.%t

我确认了xdebug的上述路径。这是正确的:

# ls -lh /usr/lib64/php/modules/xdebug.so
-rwxr-xr-x 1 root root 200K May 21  2013 /usr/lib64/php/modules/xdebug.so

另请注意Xdebug的工作原理。

1 个答案:

答案 0 :(得分:9)

在源自现代Red Hat版本(例如RHEL,Fedora和CentOS)的GNU / Linux系统中,PHP发行版可以分为驻留在/etc/php.ini的主要.ini文件以及其他.ini文件特定于作为驻留在/etc/php.d中的RPM安装的扩展或程序包。在初始化时,PHP将在加载主/etc/php.d/*.ini文件后读取php.ini

您似乎有一个陈旧的文件,其中包含驻留在/etc/php.d中的Xdebug设置。 Grep for Xdebug in /etc/php.d找到罪犯并将其删除或注释掉相关的行。

grep xdebug /etc/php.d/*.ini

如果Xdebug是通过手动过程单独安装的,并且您手动修改了主/etc/php.ini以加载扩展并配置其设置,那么这将解释为什么Xdebug无法正常工作,同时您仍然会在{{{}处看到有关其不存在的错误1}}。如果来自/usr/lib/php/modules/xdebug.so的配置文件从旧的32位系统复制到64位系统(其中模块位于/etc

,则也可能发生这种情况。