【問題分類】驅動使用
【關鍵字】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/lib
export LD_LIBRARY_PATH
其中/home/yashandb_odbc和/home/yashandb_client/lib是odbc驅動和C驅動lib的資料夾
新增完成後需要重新啟動php-fpm服務:
systemctl daemon-reload
systemctl restart php-fpm
方法二:
在/lib/systemd/system/php-fpm.service的[Service]部分新增環境變數
Environment=LD_LIBRARY_PATH=/usr/lib:/usr/lib64:<實際C驅動資料夾的lib>
新增完成後需要重新啟動php-fpm服務:
systemctl daemon-reload
systemctl restart php-fpm
【影響範圍】所有版本
【修復版本】-