YashanDB |PHP 无法连接 YashanDB?ODBC 驱动“找不到”的锅怎么甩?
在使用 PHP 部署 Web 应用,特别是采用 nginx + php-fpm 架构时,部分开发者在通过 ODBC 方式连接 YashanDB 数据库时会遇到如下问题:
[unixODBC][Driver Manager]Can't open lib '/home/yashandb_odbc/libyas_odbc.so': file not found
明明驱动文件路径设置正确,isql 也能正常连库,为什么 PHP 就报错?
一、问题现象
应用部署环境:
Web 服务架构:nginx + php-fpm
PHP 连接方式:ODBC 拓展
错误信息如下:
复制代码
但执行以下命令检查驱动文件链接无异常:
复制代码
说明驱动本身无问题,系统路径也是通的。
二、问题根因分析
这个问题的本质在于:
php-fpm 服务进程启动时并未加载包含 ODBC 驱动路径的环境变量
原因如下:
使用 systemctl 启动的 php-fpm 默认不会读取 shell 环境变量;
导致 php-fpm 的工作线程找不到驱动库中的 .so 文件;
而 isql 是手动执行命令,继承了当前 shell 的环境变量,因此可以正常使用。
三、解决方案
方案一:通过 EnvironmentFile 引入环境变量文件(推荐)
1、修改服务文件:
复制代码
2、在 [Service] 块中添加一行:
复制代码
3、创建环境变量配置文件 /etc/sysconfig/php-fpm:
复制代码
4、重载并重启服务:
复制代码
方案二:直接在 service 文件中写入环境变量(快速)
编辑 /lib/systemd/system/php-fpm.service,在 [Service] 段添加:
复制代码
重载服务配置并重启服务:
复制代码
四、影响范围

五、总结建议

评论