ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

php – 无法通过Linux机器上的ODBC连接到informix

2019-08-27 21:40:13  阅读:279  来源: 互联网

标签:informix php centos7 odbc


我在运行CentOS 7的虚拟机上工作,我正在尝试使用ODBC(unixODBC)通过一些php连接到Informix数据库.

我使用的是php7.0,我安装了unixODBC-2.3.7并安装了informix sdk软件包(iif.12.10.FC12DE.linux-x86_64).

我已经将odbc.ini和odbcinst.ini配置为:

ODBCINST.INI:

[ODBC Drivers]
IBM INFORMIX ODBC DRIVER=Installed
[IBM INFORMIX ODBC DRIVER]
Driver=/opt/IBM/Informix_Software_Bundle/lib/cli/iclis09b.so
Setup=/opt/IBM/Informix_Software_Bundle/lib/cli/iclis09b.so
APILevel=1
ConnectFunctions=YYY
DriverODBCVer=03.80
FileUsage=0
SQLLevel=1
smProcessPerConnect=Y

ODBC.INI:

[ODBC Data Sources]
informix_db=IBM INFORMIXODBC DRIVER

[informix_db]
Driver=/opt/IBM/Informix_Software_Bundle/lib/cli/iclis09b.so
Description=IBM INFORMIX ODBC DRIVER
HostName=xxx.xxx.xxx.xxx
Service=xxxx
Database=xxx
LogonID=xxx
pwd=xxx
ServerName=xxx
Client_Locale=xxx
DB_Locale=xxx

然后,我使用以下命令设置环境变量:

export INFORMIXDIR=/opt/IBM/Informix_Software_Bundle
export INFORMIXSERVER=xxx
export LD_LIBRARY_PATH=${INFORMIXDIR}/lib/cli

我的php代码如下:

<?php 
$dbUserName=xxx;
$dbPassword=xxx;
$conn=odbc_connect("Driver={IBM INFORMIX ODBC DRIVER};HOSTNAME=xxx;Database=xxx;PORT=xxx;PROTOCOL=onsoctcp;", $dbUserName, $dbPassword);
 if (!$conn)
 {
    echo odbc_errormsg();
 }
 else {
    $sql="{CALL somequery}";
    $res=odbc_exec($conn,$sql);
    odbc_result_all($res);
 }
?>

不幸的是,当我运行php时,我收到以下错误:

[unixODBC][Driver Manager]Can't open lib '/opt/IBM/Informix_Software_Bundle/lib/cli/iclis09b.so' : file not found

我在similar question上读到这可能是由于DriverVersion出错导致的,所以我在odbcinst.ini中尝试了03.80和02.70(用php和unixODBC安装的odbc).

我对linux很新,不知道其他问题可能导致它?也许我将环境变量设置为false?

谢谢.

编辑

在我尝试以下操作后使用isql命令工作:
– 添加以下环境变量:INFORMIXSQLHOSTS CLIENT_LOCALE DB_LOCALE ODBCINI ONCONFIG
– 添加onconfig文件并进行配置.
– 添加sqlhosts文件并进行配置.

仍在弄清楚如何使PHP代码工作(仍然给出相同的错误)

希望有所帮助.

编辑#2
通过终端运行php工作,并且我可以使用以前的数据库成功查询informix数据库,只有当我通过浏览器调用php代码时才使用它(使用apache).

正如某人在different post上所建议的那样,这是通过在驱动程序库所在的目录中运行ls -l而产生的结果:

[root@administration-pc cli]# ls -l
total 21748
-rwxr-xr-x 3 informix informix 1865750 Jun 25  2018 iclis09b.so
-rwxrwxrwx 3 informix informix 1907069 Jun 25  2018 iclit09b.so
-rwxr-xr-x 2 informix informix   32805 Jun 25  2018 idmrs09a.so
-rw-r--r-- 2 informix informix 3595434 Jun 25  2018 libcli.a
-rw-r--r-- 2 informix informix   32864 Jun 25  2018 libdmr.a
-rw-r--r-- 2 informix informix 3595434 Jun 25  2018 libifcli.a
-rwxr-xr-x 3 informix informix 1865750 Jun 25  2018 libifcli.so
-rw-r--r-- 2 informix informix   32864 Jun 25  2018 libifdmr.a
-rwxr-xr-x 2 informix informix   32805 Jun 25  2018 libifdmr.so
-rwxr-xr-x 3 informix informix 1865750 Jun 25  2018 libixcli.so
-rwxrwxrwx 3 informix informix 1907069 Jun 25  2018 libtcli.so
-rw-r--r-- 1 informix informix 3593510 Jun 25  2018 libthcli.a
-rwxrwxrwx 3 informix informix 1907069 Jun 25  2018 libthcli.so
-rw-r--r-- 1 root     root           8 Mar 13 16:22 sample.txt

here是appin的phpinfo()的结果;和here一个用于运行终端的php.

我还为两者运行了exec(‘whoami’),当终端返回root时,apache返回apache.

我尝试更改httpd.conf以便用户是root而不是apache让我再启动apache了.

另外,将iclis09b.so的权限更改为apache似乎不起作用.

EDIT#3(溶液)

Apache显然无法访问环境变量,因此您必须向其添加所有环境变量…

我的位于/ etc / sysconfig / httpd …

解决方法:

您提到的所有参考片段都指向直接使用Informix ODBC驱动程序,这非常好.我找不到任何可能导致您获得错误的代码段问题.此刻,我对错误文本片段[unixODBC] [驱动程序管理器]感到有点困惑.我的意思是,当应用程序直接引用Informix ODBC驱动程序时,unixODBC驱动程序管理器不应该出现.你可以尝试使用以下值的LD_LIBRARY_PATH吗?

export LD_LIBRARY_PATH=${INFORMIXDIR}/lib:${INFORMIXDIR}/lib/esql:${INFORMIXDIR}/lib/cli

仅供参考:由于您已创建DSN(使用INI文件),因此您只需在PHP应用程序使用的连接字符串中指定DSN名称,例如:

"DSN=informix_db; uid=xxx; pwd=xxxx;"

如果您想尝试使用纯ODBC示例应用程序连接(我的意思是在PHP环境之外)进行故障排除,那么这里是ODBC应用程序示例代码.
https://github.com/OpenInformix/ODBCExamples/blob/master/src/IfxOdbcSample1.c

https://github.com/OpenInformix/ODBCExamples/blob/master/src/odbc.ini

https://github.com/OpenInformix/ODBCExamples/blob/master/src/makefile

https://github.com/OpenInformix/ODBCExamples/blob/master/src/envc.bsh

标签:informix,php,centos7,odbc
来源: https://codeday.me/bug/20190827/1744992.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有