我正在尝试通过 ODBC 从 Ubuntu Linux 机器连接到 NetSuite。我已经设置好了一切。它通过 shell 和 PHP 命令行工作。但是当我尝试通过对 PHP 的 Web 请求建立此连接时,它失败并出现此错误:
Warning: odbc_connect(): SQL error: [unixODBC][Driver Manager]Can't open lib '/opt/netsuite/odbcclient/lib64/ivoa25.so' : file not found, SQL state 01000 in SQLConnect in
为了让它在 shell 中工作,我必须将它添加到我的 .profile
(通过 NetSuite 驱动程序附带的 readme.txt
)
ODBCINI="/opt/netsuite/odbcclient/odbc64.ini"
OASDK_ODBC_HOME="/opt/netsuite/odbcclient/lib64"
LD_LIBRARY_PATH="/opt/netsuite/odbcclient/lib64${LD_LIBRARY_PATH:+":"}${LD_LIBRARY_PATH:-""}"
export ODBCINI
export OASDK_ODBC_HOME
export LD_LIBRARY_PATH
问题似乎与设置 LD_LIBRARY_PATH
有关。我注意到 this page大约在页面的一半处它说
"Note: You can only set this environment variable inside an interactive shell."
NetSuite 驱动程序需要对 LD_LIBRARY_PATH
进行此更新,那么还有其他选项可以发出 Web 请求来执行我的 odbc_connect()
语句吗?
我尝试过但失败了
putenv()
- 添加
。/etc/odbcinst.ini
到/etc/init.d/php7.0-fpm
脚本 - 将所需的语句和导出添加到
/etc/environment
(即使它说它不起作用) - 将
/opt/netsuite/odbcclient/lib64
添加到新文件/etc/ld.so.conf.d/netsuite.conf
当我执行上面列表中的最后一个时,我成功运行了 sudo ldconfig
但是在尝试连接和查询时遇到了这个错误(一堆垃圾,但不同的错误!):
[unixODBC]�pV�,8�(8��|D�x������H�R��ut�
(8eow�ut�(8�����|`gx�0x�pV�K����������M0�0�N��M0� ������4�
�0d��Ryy
最佳答案
我没有答案,但我现在不能发表评论...不过,我有可能有用的信息。
长期以来,我一直在为这个适用于 Linux 的 NetSuite ODBC 驱动程序苦苦挣扎。我了解到的一件有趣的事情是该驱动程序与 Ubuntu 14.02 不兼容。它与 2017 年 4 月不再支持的 12.02 兼容。但是,在我设置的 Ubuntu 12.02 VM 上,我仍然遇到同样的错误。他们在 2016 年 5 月下旬发布了一篇关于兼容性的文章,那是在我放弃它并只是在 Windows 机器上开发之后。
我在使用 ISQL 时遇到了同样的错误,在我的 PHP 代码中也遇到了同样的错误。我检查了权限设置为任何人 r 和 x 但它不起作用。
运行这条命令时:
sudo ldd /opt/netsuite/odbcclient/lib64/ivoa25.so
我明白了:
linux-vdso.so.1 => (0x00007ffebfb4b000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fcfefc08000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fcfefa04000)
libicuuc.so.42 => not found
libicudata.so.42 => not found
libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007fcfef7f6000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fcfef5d8000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fcfef2d4000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fcfeefce000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fcfeedb8000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcfee9f3000)
/lib64/ld-linux-x86-64.so.2 (0x00007fcff01b6000)
libaudit.so.1 => /lib/x86_64-linux-gnu/libaudit.so.1 (0x00007fcfee7cf000)
这没有意义,因为它们在目录中:
drwxr-xr-x 2 root root 4096 Jan 8 2016 .
drwxr-xr-x 8 root root 4096 Jul 28 16:45 ..
-rw-r--r-- 1 root root 1534752 Jan 8 2016 ddtrc25.so
-rw-r--r-- 1 root root 260915 Jan 8 2016 ivldap25.so
-rw-r--r-- 1 root root 12137 Jan 8 2016 ivmgan25.so
-rw-r--r-- 1 root root 124833 Jan 8 2016 ivmgapi25.so
-rw-r--r-- 1 root root 437482 Jan 8 2016 ivmghu25.so
-rw-r--r-- 1 root root 1521 Jan 8 2016 ivoa25.ini
-rwxr-xr-x 1 root root 3255664 Jan 8 2016 ivoa25.so
-rw-r--r-- 1 root root 14920460 Jan 8 2016 libddicu25.so
-rw-r--r-- 1 root root 16010036 Jan 8 2016 libicudata.so.42
-rw-r--r-- 1 root root 1608359 Jan 8 2016 libicuuc.so.42
-rw-r--r-- 1 root root 354900 Jan 8 2016 libivoa25m.so
-rw-r--r-- 1 root root 1172888 Jan 8 2016 libodbcinst.so
-rw-r--r-- 1 root root 1659688 Jan 8 2016 libodbc.so
-rw-r--r-- 1 root root 1457352 Jan 8 2016 odbccurs.so
-rw-r--r-- 1 root root 2154752 Jan 8 2016 openssl700.so
无论“未找到”文件的权限如何,我都找不到文件。当我创建这些文件的符号链接(symbolic link)时,我能够得到 ivoa25.so not found 错误,但随后得到了这个错误:
Warning: odbc_connect(): SQL error: [unixODBC], SQL state in SQLConnect in/var/www/html/DataBase.php on line 5
无法连接:
关于这个错误,我联系了 unixODBC.org 的人,他们是这样说的:
Its a guess, but maybe try setting ODBCINI, the driver may need that to find the ini file
export ODBCINI=/etc/odbc.ini
但是那也没有做任何事情......
我很乐意帮助您解决这个问题,因为它对我也有帮助...我们应该交换意见。
更新
使用 ISQL 时错误仍然存在
$ odbcisql64 -m 0
命令。当你运行它时,它看起来像这样:
DataDirect OpenAccess SDK Interactive SQL (ODBC) Version 7.2
(c) Copyright 1995-2013 Progress Software Corporation. All rights reserved.
Program Locale:en_US.UTF-8
ISQL>
尝试使用连接字符串以这种方式连接
ISQL> connect "user"*"pw"@netsuite
同样的错误...
SQL: connecting to database: netsuite...
SQL: Can't connect to database netsuite
The following error information describes the failure
ODBC Call = SQLConnect()
SQL State = 01000
Native error = 0(0)
Error Message = [unixODBC][Driver Manager]Can't open lib '/opt/netsuite/odbcclient/lib64/ivoa25.so' : file not found
SQL: isql_connect() failure
Elapsed time 2 ms.
ISQL>
...但是,我可以使用这个更通用的 isql 命令“连接”(至少它似乎可以连接)
$ isql NetSuite user pw
...它连接。这适用于 Ubuntu 14 和 12。但是我无法使用任何 SQL 命令,它看起来与其他 ISQL 连接结果不同
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
关于php - 通过 PHP7.0-FPM 为 ODBC 连接更新系统范围的 LD_LIBRARY_PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38516315/