2016-07-22 48 views
3

我試圖從Ubuntu Linux機器通過ODBC連接到NetSuite。我已經設置了一切。它通過shell和PHP命令行工作。但是,當我嘗試,使通過網絡請求PHP這方面,它失敗,此錯誤:通過PHP7.0-FPM更新用於ODBC連接的LD_LIBRARY_PATH系統範圍

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 

爲了它從外殼的工作,我不得不這樣通過readme.txt添加到我的.profile(與NetSuite的驅動程序附帶)

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 

回答

1

因此,解決辦法結束了簡單高於預期。我基本上創建了一個bash腳本,用於導出我需要的環境變量,然後運行PHP腳本。以下是我的netsuite-odbc.sh腳本的全部內容。我現在可以連接並運行我的查詢。

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 

/usr/bin/php /home/user/netsuite-odbc.php 
0

我不有一個答案,但我不能評論在這一點上......但是,我確實有可能有用的信息。

很久以來,我一直在爲這種適用於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,但後來得到這一個:

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 

,但沒有做任何事情要麼...

我很樂意幫助你解決這個問題,因爲這將有助於我太多...我們守ld比較筆記。

UPDATE

使用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> 
+0

看看我現在在做什麼,看看它是否也解決了你的問題。 – Nathan

+0

我做了一些改變,並且讓isql工作,以及在控制檯中工作的php代碼,但在我的瀏覽器中仍然出現錯誤。你可以說關於權限和所有權或任何其他可以幫助解決這個問題的Apache2設置? – mudrock

+0

對不起,我不能幫助Apache。我使用nginx並在CLI上運行NetSuite。你嘗試了我在OP中嘗試的所有選項嗎? ('putenv'等) – Nathan