CentOs下php連mssql並配置unixODBC

技術小胖子發表於2017-11-07
前言:
    換了工作後,一直忙於LINUX系統架構方面的事情,也經歷了從不太懂的痛苦到較為熟悉點的沾沾自喜。工作的過程中,一直把百度做為自已的首選搜尋引擎。可後來,卻不得不而且最終只用了谷歌。因為此給予我的幫助更好更多。
   
    OK, 扯回話題,公司現在用的資料庫比較雜,MS SQL、ORACLE、MYSQL都有在用,之前使用WINDOWS+PHP的環境,這種情況下使用PHP連MS SQL是比較容易的,但效能上卻比之LAMP差了不少。由此,新工作的主要的事情就是系統及WEB配置的遷移。

      但 是LAMP環境下,PHP連MS SQL卻有不少的問題。公司的單點登陸問題就實現不了。更不能體現LAMP較之WAMP的優勢。怎麼辦,BAIDU用吧。卻發現很多中文的解決方案,不是 版本較老,就是實現不了。後來,選擇了GOOGLE,找到了很多E文的解決方案。試著做了,雖說走了些彎路,但最終還是實現了我的需求.      期 間,參考了提供驅動的freetds官方網站,很仔細的閱讀了文件,以及一些前人的解決方案。在些感 謝他們。
     
目前,我實面了種情況下的安裝:

第一:系統安裝時已經安裝配置好LAMP。這時重新編譯PHP環境相當困難。

          我使用RPM 包和TAR包兩種方式來安裝環境。並不改動PHP的安裝及配置,但只能使用ODBC連線MS SQL(資料來源)。


第二:系統安裝後,使用TAR包安裝配置LAMP環境。這時可以重新編譯PHP。

        我使用TAR包來安裝,且有重新編譯PHP和不重新編譯PHP的兩種方案。重新編譯可以實現直接連線和ODBC連線兩種方式。不重新編譯可以實現ODBC連線MS SQL(資料來源)




    這 篇博文,以第一種情況,且使用TAR包的方式來安裝freetds,以rpm安裝unixODBC-devel及unixODBC。使用ODBC連線MS SQL(資料來源)。(要想了解更多的關於php下如何連線MS SQL,以及幾種方式就參考[url]www.freetds.org[/url]中的HOWTO文件,我接觸到的使用了兩種一是直接連線,一是odbc。)

一、安裝環境

1、CentOs 5.1 + FreeTds0.64.tar.gz + unixODBC-2.2.11-7.1(除了FreeTds是額外的包,其它的都可以使用YUM來安裝,或是系統安裝時就裝好)

2、最好也安裝上XWINDOWS,我安裝的是GNOME的,因為配置DSN(資料來源)時會用上。當然,你也可以在文字介面中配置。


二、部分包的安裝及版本顯示
1、[root@rpm-mssql ~]# rpm -aq |grep httpd
system-config-httpd-1.3.3.1-1.el5
httpd-2.2.3-11.el5_1.centos.3
httpd- devel-2.2.3-11.el5_1.centos.3    (這個包包含 Apache HTTP 伺服器的包含檔案、標頭檔案和 APXS 工具程式。如果你打算載入額外的模組(除了該產品所提供的),你需要它。 嘿嘿,如果裝PHP時,不要使用TAR包的HTTPD,那就可以使用–with-apxs2=/usr/sbin/apxs.關於此的安裝另文說明)
httpd-manual-2.2.3-11.el5_1.centos.3

2、[root@rpm-mssql ~]# rpm -aq |grep php
php-cli-5.1.6-15.el5
php-common-5.1.6-15.el5
php-5.1.6-15.el5
php-odbc-5.1.6-15.el5
php-pdo-5.1.6-15.el5
php-pear-1.4.9-4
php-mysql-5.1.6-15.el5
php-ldap-5.1.6-15.el5
你並不需要安裝如此之多,根據自已的需求,安裝。因為我是系統安裝時定製安裝成LAMP環境的。

3、[root@rpm-mssql ~]# rpm -aq |grep unixODBC
unixODBC-devel-2.2.11-7.1 (這個包的作用同httpd-devel,一定要裝上啊,安裝freetds.tar.gz時要用上的,它會自動尋找unixODBC的安裝路徑的。否則有可能編譯出錯。)
unixODBC-2.2.11-7.1
unixODBC-kde-2.2.11-7.1(同志們,這個要裝啊,本來是KDE桌面下的圖形配置ODBC資料來源的工具。呵呵,在GNOME中也能用的。)

OK,mysql的安裝包我不多說,因為這裡主要是使用ODBC(DSN資料來源)在LAMP環境下PHP連MS SQL的。

4、安裝要求的包:

freetds-0.6.tar.gz   [url]http://www.ibiblio.org/pub/Linux/ALPHA/freetds/stable/[/url]

unixODBC-kde-2.2.11-7.1

unixODBC-devel-2.2.11-7.1.i386.rpm     yum install -y unixODBC-devel [url]http://mirror.centos.org/centos/5.1/os/i386/CentOS/[/url]


三、安裝、測試和配置:
1、安裝freetds(均是在root使用者下,如果你在其它使用者下,記得在執行make install時su – root)
注:在系統安裝時要安裝上GCC編譯器等開發工具及庫。不過,在CentOs下少什麼就用yum來安裝啦。
注:同樣的條件可以安裝在REDHAT AS5.1 及AS5下。

[root@rpm-mssql freetds-0.64]# tar zxvf freetds-0.64.tar.gz
[root@rpm-mssql ~]# cd freetds-0.64
[root@rpm-mssql freetds-0.64]# ./configure –with-tdsver=7.0 –with-unixODBC

以下的要在root使用者下執行,尤其是make install
[root@rpm-mssql freetds-0.64]# make;make install
[root@rpm-mssql freetds-0.64]# make clean
ok,現在已安裝好啦。這時會在/usr/local/etc生成freetds.conf檔案
[root@rpm-mssql freetds-0.64]# cd /usr/local/etc
[root@rpm-mssql etc]# ll
total 12
-rw-r–r– 1 root root 3572 Jan 24 19:13 freetds.conf
-rw-r–r– 1 root root  362 Jan 24 19:13 locales.conf
-rw-r–r– 1 root root  219 Jan 24 19:13 pool.conf

可以使用ODBCConfig來配置啦
注,在安裝unixODBC unixODBC-devel後,就會在/etc生成兩個檔案odbc.ini odbcinst.ini:
[root@rpm-mssql freetds-0.64]# ll /etc/od
odbc.ini             odbcinst.ini.rpmnew  oddjobd.conf.d/
odbc.ini.rpmnew      oddjob/              
odbcinst.ini         oddjobd.conf     

2、測試和配置
A、安裝好freetds後,先使用tsql來測試下:
[root@rpm-mssql etc]# /usr/local/bin/tsql -S 211.103.155.xxx -U sa Password:password (xxx是三個數字,為了安全,變了。而:後的password為真實的SA的密碼)
locale is “en_US.UTF-8”
locale charset is “UTF-8”
Password:   (這裡還要再輸入一次密碼)
1> 
如果你足夠幸運,呵呵,就會出現 “1>” 說明你之前的編譯正確啦。  
接下來就開始真正的進入正題啦,配置freetds.conf

B、編輯freetds.conf(經測試,這個步驟可以省去。因為裝freetds的目的是為了它的驅動。實際上這也暗示著大家採用rpm包安裝時需要做些什麼啦)

[root@rpm-mssql etc]# vi /usr/local/etc/freetds.conf
加入如下程式碼,
[MySql2k]  (在FreeTds0.64版本中,這個引數很重要。在“System DSN”中,需要用的到。這也是和之前版本的一些差別)
        host = 211.103.155.xxx (這個是裝有sql server 2k的伺服器IP,連SQL 2K5也能行)
        port = 1433
        tds version = 8.0

C、配置/etc/odbc.ini   /etc/odbcinst.ini (注,為了更直觀,我使用X視窗的方式下圖形配置,當然,我也會把經過圖形配置後的ini檔案拷配過來)
這裡需要用到ODBCConfig  /usr/bin/ODBCConfig
[root@rpm-mssql etc]# /usr/bin/ODBCConfig
ODBCConfig: cannot connect to X server 

D、切換到X WINDOWS,前面說過,使用的是GNOME,各位亦可以使用KDE。君不見unixODBC-kde就是為KDE專門做的嘛。
[root@rpm-mssql etc]# /usr/bin/ODBCConfig後,出現如下圖,圖示中有說明。但要宣告的是,我使用的FreeTds的版本是0.64的,和前一版本0.63有 些使用上的差別。主要是”Servername”的變化,以及”Setup”的變化。在接下來的一系列圖示中,會分別說明。


     安裝FreeTds的目的,就是為了提供PHP連線MSSQL的驅動的。上面所有的動作,就是為此做準備的。驅動有了裝載的路徑,就要增加資料來源,以使連線MSSQL成功。

接下來的E,F就是重點的以圖文並茂的方式來說明的。
E、圖形設定Driver的過程,就是配置/etc/odbcinst.ini的過程。
freetds0.64版本增加了對64位資料庫的支援。


下面的是圖形配置後的odbcinst.ini的檔案,其中MySql2k是新增加地:
[root@rpm-mssql ~]# cat /etc/odbcinst.ini
[PostgreSQL]
Description             = ODBC for PostgreSQL
Driver          = /usr/lib/libodbcpsqlS.so
Driver64                = /usr/lib
Setup           = /usr/lib
Setup64         = /usr/lib
UsageCount              = 1
CPTimeout               = 
CPReuse         = 

[MySql2k]
Description             = v0.64 with Protocol v8.0
Driver          = /usr/local/lib/libtdsodbc.so
Driver64                = /usr/local/lib/libtdsodbc.so
Setup           = /usr/lib/libtdsS.so
Setup64         = /usr/lib/libtdsS.so
UsageCount              = 1
CPTimeout               = 
CPReuse         = 

F、DSN資料來源建立及注意事項:
圖形設定”System DSN”的過程,是配置/etc/odbc.ini檔案的過程:



下面的是圖形配置”System DSN”後,odbc.ini的檔案,如果沒有或是不想安裝X 視窗的話,直接設定。
[root@rpm-mssql ~]# cat /etc/odbc.ini
[mssql]
Description             = MySql2k
Driver          = MySql2k
Servername              = MySql2k   (這裡,不要設定IP地址什麼的,要和FREETDS.CONF裡的設定一樣,至少我試的就是如此,在FREETDS0.63中並沒有此現象。)
Database                = 
UID             = sa
PWD             = 
Port            = 1433

G、isql 測試:

成功了,呵呵,實際上這篇文章也可以就此打住啦。不過。還是實測下PHP連MS SQL的效果吧

H、php頁面測試
[root@rpm-mssql ~]# vi /var/www/html/phpmssql.php
<?
$conn_beidabiz=odbc_connect(“mssql”,sa,”password”); ###password,變成自己相應的直實密碼。####
{
echo “ok”;
}
?>


全文到些完結,下一篇估計寫下全部是使用rpm包來安裝的方式配置php連MSSQL.








 本文轉自 rickyfang 51CTO部落格,原文連結:http://blog.51cto.com/rickyfang/125837,如需轉載請自行聯絡原作者



相關文章