Apache2环境下PHP连接DB2失败但CLI可正常连接的问题排查
背景
已通过PECL安装IBM DB2 PHP扩展,在PHP CLI环境中运行以下代码可正常连接DB2服务器:
<?php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); $connection_string="DATABASE=NAMZPR1;HOSTNAME=172.20.10.162;PORT=50055;PROTOCOL=TCPIP;UID=bouser;PWD=xxx"; $conn = db2_connect($connection_string, "", ""); if ($conn) { echo "Connection succeeded. "; db2_close($conn); } else { echo "Connection failed. " . db2_conn_errormsg() . " "; } ?>
但通过Apache2浏览器访问该PHP文件时,始终提示连接失败。
已完成的配置操作
- 修改对应PHP.INI文件,添加IBM DB2扩展配置
- 在Apache的
httpd.conf中加入环境变量配置:
export LD_LIBRARY_PATH=$HOME/clidriver/odbc_cli/clidriver/lib
错误排查历程
- 初始报错(模块未加载):
Fatal error: Uncaught Error: Call to undefined function db2_connect() in /var/www/html/db2.php:8 Stack trace: #0 {main} thrown in /var/www/html/db2.php on line 8
- 解决模块加载问题后,Apache已成功加载ibm_db2模块,模块信息如下:
ibm_db2 IBM Db2 and compatible databases support enabled Module release 2.1.7 Binary data mode (ibm_db2.binmode) 1 - DB2_BINARY DB2 instance name (ibm_db2.instance_name) no value Commitment control (ibm_db2.i5_allow_commit) 0 - DB2_I5_TXN_NO_COMMIT System naming mode (ibm_db2.i5_sys_naming) 0 - disabled
- 当前Apache错误日志输出:
[Thu Feb 09 16:04:33.929426 2023] [php:warn] [pid 629664] [client 172.20.11.18:57220] PHP Warning: db2_connect(): SQLGetDiagRec returned -2 (is the driver working?) in /var/www/html/db2.php on line 8
补充配置调整
- 已设置DB2实例名,修改后的模块信息:
IBM Db2 and compatible databases support enabled Module release 2.1.7 Binary data mode (ibm_db2.binmode) 1 - DB2_BINARY DB2 instance name (ibm_db2.instance_name) db2inst1 Commitment control (ibm_db2.i5_allow_commit) 0 - DB2_I5_TXN_NO_COMMIT System naming mode (ibm_db2.i5_sys_naming) 0 - disabled
- 已配置以下环境变量:
export IBM_DB_HOME=/opt/ibm/db2/V11.5 export LD_LIBRARY_PATH=/opt/ibm/db2/V11.5/lib64 export LIBPATH=/home/admini/sqllib/lib export PATH=/home/admini/sqllib/bin:$PATH
疑问
经过上述配置调整后,问题仍未解决,请问还遗漏了哪些必要配置?
内容的提问来源于stack exchange,提问作者Simon Giesen

