PHP启动无法加载mongodb.so动态库报错该如何修复
PHP7启动加载mongodb.so动态库故障修复方案
两个报错分别对应配置错误、扩展二进制不兼容两类问题,按以下步骤依次修复即可:
1. 修复mongodb.so.so文件不存在的报错
这个问题是扩展配置写法错误导致的:部分发行版打包的PHP7加载扩展时会自动给配置的扩展名追加.so后缀,如果配置里手动写了全后缀名,就会拼接出mongodb.so.so的错误路径。
- 首先执行命令查询当前PHP加载的配置文件路径:
php --ini - 打开输出结果中
Scan for additional .ini files in对应的目录,找到mongodb相关的配置文件(通常命名为mongodb.ini或20-mongodb.ini),检查其中的扩展加载行:- 如果当前行是
extension=mongodb.so,修改为extension=mongodb后保存 - 如果修改后重启仍然提示找不到mongodb.so文件,再改回
extension=mongodb.so即可,适配不同编译参数的PHP版本
- 如果当前行是
2. 修复undefined symbol: ns_parserr未定义符号报错
这个报错是已安装的mongodb扩展二进制和系统依赖、PHP版本不兼容导致的,不要使用第三方源预编译的旧扩展包,通过PECL重新编译适配PHP7的版本即可解决:
- 首先安装编译依赖:
- Debian/Ubuntu系执行:
apt-get install -y php7-dev libssl-dev libresolv-dev build-essential(命令中php7-dev替换为你实际使用的PHP7小版本对应开发包,比如PHP7.4对应php7.4-dev) - CentOS/RHEL系执行:
yum install -y php-devel openssl-devel bind-utils gcc make
- Debian/Ubuntu系执行:
- 卸载之前安装的错误版本mongodb扩展:
- 源安装的版本对应执行卸载:Debian/Ubuntu系
apt-get remove --purge php-mongodb,CentOS/RHEL系yum remove php-pecl-mongodb - PECL安装的版本执行:
pecl uninstall mongodb
- 源安装的版本对应执行卸载:Debian/Ubuntu系
- 安装兼容PHP7的mongodb扩展:注意mongodb扩展1.15及以上版本已停止支持PHP7,需安装1.14.x系列的兼容版本,执行命令:
pecl install mongodb-1.14.2 - 编译完成后执行命令查询PHP的扩展存放目录:
php -i | grep extension_dir - 确认编译生成的
mongodb.so文件已存放到上述扩展目录中,文件权限设置为644,所有者与PHP运行进程用户一致即可
3. 修复验证
执行命令检查扩展是否正常加载,无启动报错即修复完成:php -m | grep mongodb
命令正常输出mongodb字样后,重启对应PHP服务(php-fpm、Apache等)即可生效。
多PHP版本共存的环境,编译扩展时必须使用对应PHP7版本的
pecl、phpize命令,不能使用其他PHP版本的编译工具,否则仍会出现版本兼容类报错。
内容的提问来源于stack exchange,提问作者anony_
相关产品推荐
相关产品推荐

