写点什么

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

作者:YashanDB
  • 2024-08-08
    广东
  • 本文字数:595 字

    阅读完需:约 2 分钟

问题分类】驱动使用


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


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


[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]部分添加环境文件


EnvironmentFile=/etc/sysconfig/php-fpm
复制代码


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


LD_LIBRARY_PATH=/usr/lib:/usr/lib64:/home/yashandb_odbc:/home/yashandb_client/libexport LD_LIBRARY_PATH其中/home/yashandb_odbc和/home/yashandb_client/lib是odbc驱动和C驱动lib的文件夹
复制代码


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


systemctl daemon-reloadsystemctl restart php-fpm
复制代码

方法二:

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


Environment=LD_LIBRARY_PATH=/usr/lib:/usr/lib64:<实际C驱动文件夹的lib>
复制代码


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


systemctl daemon-reloadsystemctl restart php-fpm
复制代码


影响范围】所有版本


修复版本】-

用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
【YashanDB数据库】PHP无法通过ODBC连接到数据库_yashandb_YashanDB_InfoQ写作社区