PHP启用pdo_sqlite扩展报错undefined symbol: php_pdo_unregister_driver如何解决
报错根因
该错误是pdo_sqlite扩展依赖的PDO核心扩展未优先加载导致,pdo_sqlite.so运行需要调用PDO核心提供的php_pdo_unregister_driver符号,加载顺序颠倒就会找不到对应符号。
解决步骤
- 找到PHP扩展配置目录,对应你报错的20190902 API版本(对应PHP 7.4),默认路径为
/etc/php/7.4/mods-available/ - 检查两个扩展的配置加载优先级:
- 确保PDO配置文件的数字前缀小于pdo_sqlite的前缀,比如pdo的配置文件命名为
10-pdo.ini,pdo_sqlite的配置文件命名为20-pdo_sqlite.ini - 如果没有数字前缀,或者pdo_sqlite的前缀数字更小,直接重命名配置文件调整加载顺序即可
- 确保PDO配置文件的数字前缀小于pdo_sqlite的前缀,比如pdo的配置文件命名为
- 调整完成后重启PHP对应的服务:
- 若使用php-fpm,执行
systemctl restart php7.4-fpm - 若使用Apache mod_php,执行
systemctl restart apache2
- 若使用php-fpm,执行
- 验证修复结果:执行
php -m | grep -E 'pdo|sqlite',返回结果同时包含pdo和pdo_sqlite即修复完成
特殊场景处理
如果是自行编译的PHP版本,需确认编译pdo_sqlite扩展时使用的源码和当前运行的PHP版本完全一致,版本不匹配也会出现符号缺失问题,重新使用同版本PHP源码编译pdo_sqlite扩展即可。
内容的提问来源于stack exchange,提问作者Hanson
相关产品推荐
相关产品推荐

