表題の作業をやったんですが、物凄く苦労しました。ググれば情報は出てくるんだけど、書かれた通りやっても上手くいかなかったり。サーバの構成とかによってやり方変わるしね。詳しい方にアドバイス貰いつつ何とか出来ました。
サーバ
Windows Server 2003 R2 SP2
SQLServer 2008 EXPRESS
クライアント
Red Hat Enterprise Linux 4
PHP5.2.14(PDOは使える状態)
SQLServerと外部接続するにはODBCを使います。PHPで使えるのを調べてみるとPDO_DBLIBです。ネット上ではこれをインストールするには
と書かれてたけど、エラーで出来ず。仕方ないので自分でコンパイルする事に。
その前にFreeTDSが必要なのでそっちを入れます。これもコンパイルしようとしたらなんかエラー出たんで、yumに頼る。
| # yum install freetds-devel-0.64-1.el4.rf |
これで入った。設定ファイルfreetds.confに以下のように書く。
# vi /usr/local/etc/freetds.conf
[global]
port = 1433
tds version = 8.0
text size = 2147483647
charset = sjis
client charset = UTF-8
[mssql]
host = (IPアドレス)
port = 1433
tds version = 8.0
charset = sjis
client charset = UTF-8 |
再度FreeTDSをコンパイルしてみると…またエラー出る。共有ライブラリを認識させないとダメらしい。
# vi /etc/ld.so.conf
/usr/local/lib
# ldconfig |
今度こそ出来た。
# tar xvf PDO_DBLIB-1.0.tar
# phpize
# ./configure
# make
# male install |
pdo_dblib.soが作成されたので、それを/usr/local/php5/lib/php/extensions/5.2.14/にコピーしてからextensions.ini編集。
# vi /usr/local/php5/etc/extensions.ini
extension=pdo_dblib.so |
そしてApache再起動。phpinfo()で確認するとdblib入ってました。これで完了かと思ったらまだダメで、unixODBCとlibiconvが必要だった。
# tar xvzf unixODBC-2.2.11.tar.gz
# cd unixODBC-2.2.11
# ./configure –enable-gui=no
# make
# make install |
設定ファイルodbcinst.ini
# vi /usr/local/etc/odbcinst.ini
[FreeTDS]
Driver = /usr/lib/libtdsodbc.so.0
Setup = /usr/lib/libtdsS.so
CPTimeout =
CPReuse =
FileUsage = 1 |
設定ファイルodbc.ini
# vi /usr/local/etc/odbc.ini
[ODBC Data Sources]
freetds = FreeTDS ODBC Driver
[freetds]
Driver = FreeTDS
Description = MSSQL
Trace = No
Servername = mssql
Database = (データベース名)
Port = 1433
[Default]
Driver = FreeTDS |
環境変数を設定しないとちゃんと動かないので設定。
# export ODBCINI=/usr/local/etc/odbc.ini
# export ODBCSYSINI=/usr/local/etc |
libiconvコンパイル
# tar xvzf libiconv-1.10.tar.gz
# gunzip libiconv-1.10-cp932.patch.gz
# patch -p0 < libiconv-1.10-cp932.patch
# cd libiconv-1.10
# ./configure
# make
# make install |
ここまでやってから、ようやくSQLServerにテスト接続。
| # tsql -S mssql -U (ID) -P (パスワード) |
“1>”って出たら接続成功です。quitで切断し、今度は別のやり方で接続。
| # isql -v mssql (ID) (パスワード) |
エラーで動かない…とりあえず放置してPHPで接続を試す。
<?php
$dbh = new PDO(‘dblib:host=(IPアドレス):1433;dbname=(データベース名)’, ‘(ID)’, ‘(パスワード)’);
?> |
繋がった! この記述方法もネット上では書いてあることバラバラで苦労したけど、とにかく接続できました。
上記の事を手探り状態で試行錯誤しつつやっていったんで、かなり大変でした。ホントはWindows Serverが客先にあって、それの外部接続だODBCだポート開放だをやりに行ったのも大変だったんだけど、もういいや。
これでようやくシステム開発に取り掛かることが出来ます。