【YashanDB知识库】PHP无法通过ODBC连接到数据库

103 阅读1分钟

【问题分类】驱动使用

【关键字】ODBC、驱动使用、PHP

【问题描述】

● 应用使用php-fpm+nginx架构,通过php的ODBC拓展连接YashanDB时出现报错:

Shell
[unixODBC][Driver Manager]Can't open lib '/home/yashandb_odbc/libyas_odbc.so': file not found

● 但是在应用所在的主机上使用isql连接YashanDB数据库正常,ldd检查/home/yashandb_odbc/libyas_odbc.so和libyascli.so.0均正常。

【问题原因分析】php-fpm和nginx均通过systemctl的方法启动,该启动方式不会读取配置到机器中的环境变量,导致php-fpm的workers进程无法正确获取到ODBC的驱动文件

【解决/规避方法】

● 在/lib/systemd/system/php-fpm.service的[Service]部分添加环境文件

Shell
EnvironmentFile=/etc/sysconfig/php-fpm

● 在/etc/sysconfig/php-fpm中添加以下内容:

Shell
LD_LIBRARY_PATH=/usr/lib:/usr/lib64:/home/yashandb_odbc:/home/yashandb_client/lib
export LD_LIBRARY_PATH
其中/home/yashandb_odbc和/home/yashandb_client/lib是odbc驱动和C驱动lib的文件夹

● 添加完成后需要重新启动php-fpm服务:

Shell
systemctl daemon-reload
systemctl restart php-fpm

【影响范围】所有版本

【修复版本】-