通过PHP7.0-FPM更新系统范围的LD_LIBRARY_PATH以进行ODBC连接
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了通过PHP7.0-FPM更新系统范围的LD_LIBRARY_PATH以进行ODBC连接,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5458字,纯文字阅读大概需要8分钟。
内容图文
我正在尝试通过ODBC从Ubuntu Linux机器连接到NetSuite.我已经完成了所有设置.它通过shell和PHP命令行工作.但是,当我尝试通过Web请求到PHP进行此连接时,它会失败,并显示以下错误:
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
无论“未找到”文件的权限如何,我都找不到该文件.当我创建了这些文件的符号链接时,我能够得到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
但那也没有做任何事……
我很乐意帮助你解决这个问题因为它对我有帮助……我们应该比较一下笔记.
UPDATE
使用ISQL使用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>
内容总结
以上是互联网集市为您收集整理的通过PHP7.0-FPM更新系统范围的LD_LIBRARY_PATH以进行ODBC连接全部内容,希望文章能够帮你解决通过PHP7.0-FPM更新系统范围的LD_LIBRARY_PATH以进行ODBC连接所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。