phpはLinuxの下でSybaseとSqlServerを同時に接続する


システム環境
OS:Redhat AS4.0
php:4.4.7
Apache:1.3.9
 
この環境は数年前に構成されたバージョンです.
phpとapacheはソースコードのコンパイルです.以前はsybaseに接続する必要があったためphpはsybaseのサポートをサポートしていました.Sybaseバージョン15、パラメータのコンパイル:
--with-sybase-ct=/opt/sybase/OCS-15_0
 
最近、プログラムはSQL SERVER 2000に接続する必要があるので、mssqlのサポートを再度追加します.まず思いついたのはfreetds.
 
公式サイト:http://www.freetds.org/
ユーザーズマニュアル:http://www.freetds.org/userguide
ダウンロードソースは、Webサイトの説明に従ってコンパイルされます.コンパイルパラメータ:
 
 
./configure --prefix=/usr/local/freetds --with-tdsver=7.1 --enable-msdblib
make
make install
 
 
インストール後に/usr/local/freetds/bin/tsql-Cを実行し、インストールに成功したことを示すメッセージが表示されます.
 
 
Compile-time settings (established with the "configure" script)
                            Version: freetds v0.91
             freetds.conf directory: /usr/local/freetds/etc
     MS db-lib source compatibility: yes
        Sybase binary compatibility: no
                      Thread safety: yes
                      iconv library: yes
                        TDS version: 7.1
                              iODBC: no
                           unixodbc: no
              SSPI "trusted" logins: no
                           Kerberos: no

 
 
次にphpを再コンパイルし、元のコンパイルパラメータの下で以下のパラメータを追加します.
 
 
--with-mssql=/usr/local/freetds
 
 
続行make&&make install
 
make installで次の警告メッセージが表示されます.
 
警告メッセージ
[10-Dec-2011 15:08:31] PHP Warning: Function registration failed - duplicate name - mssql_connect in Unknown on line 0
[10-Dec-2011 15:08:31] PHP Warning: Function registration failed - duplicate name - mssql_pconnect in Unknown on line 0
[10-Dec-2011 15:08:31] PHP Warning: Function registration failed - duplicate name - mssql_close in Unknown on line 0
[10-Dec-2011 15:08:31] PHP Warning: Function registration failed - duplicate name - mssql_select_db in Unknown on line 0
[10-Dec-2011 15:08:31] PHP Warning: Function registration failed - duplicate name - mssql_query in Unknown on line 0
[10-Dec-2011 15:08:31] PHP Warning: Function registration failed - duplicate name - mssql_free_result in Unknown on line 0
[10-Dec-2011 15:08:31] PHP Warning: Function registration failed - duplicate name - mssql_get_last_message in Unknown on line 0
.......
[10-Dec-2011 15:08:34] PHP Warning: Function registration failed - duplicate name - mssql_fetch_array in Unknown on line 0
[10-Dec-2011 15:08:34] PHP Warning: Function registration failed - duplicate name - mssql_fetch_object in Unknown on line 0
[10-Dec-2011 15:08:34] PHP Warning: Function registration failed - duplicate name - mssql_data_seek in Unknown on line 0
[10-Dec-2011 15:08:34] PHP Warning: Function registration failed - duplicate name - mssql_field_seek in Unknown on line 0
 
 
このヒントを気にせずphpinfoを見続けます.mssqlとsybaseはすでにサポートされていることがわかりました.
テストコードリンクmssqlを作成します.常に接続できないことがわかりました.Google検索を開始するには、次のようにまとめられています.
Sybaseとmssqlの最も早い同出一族はphpの中で関数が通用する.同時にfreetdsでもmssql_を使用できることが分かった.connnectはsybaseとmsssqlデータベースを同時に接続します.この説を実証するためにphpファイルを作成してsybse-ctモジュール関数のリストを印刷します.
 
 
<?php
print_r(get_extension_funcs('sybase-ct'));

 
実行ページでsybaseとmssqlが印刷されたすべての関数が見つかりました.phpコンパイルインストールでは、上に表示されている警告メッセージが表示されます.すなわちsybaseモジュールサポートにはmssqlの関数サポートが追加されている.では、mssqlを必要としないモジュールもmssqlに接続できるのではないでしょうか.次にphpを再コンパイルしてphpのmssqlのモジュールを削除します.mssql関数を使用すると、関数が使えることがわかります.ただし、指定したmssqlに接続できません.私のここの構成の問題かもしれません.多くのパラメータを調整してもつながらない.
 
結局このやり方を放棄した.freetdsを使用してsybaseとmssqlを同時に接続します.再コンパイルを続行します.コードテストを書くのはやはりだめです(2つとも同時にうまく使えません).では、3つ目の方法はありますか?Googleも、自分が自分の関数をそれぞれ使うことができるかどうかを考えて、互いに影響しないことに気づいていません.Sybaseは元の/opt/sybase/OCS-15を引き続き使用します.0,sqlserverはfreetdsを使いますね.
 
まずphpのsybase拡張モジュールコードを見てみましょう.
/opt/php/php 4を開く.4.7/ext/sybase_ct/php_sybase_ct.c、やっと気づいた.
Sybase拡張モジュールのすべての関数登録はこのファイルにあり、次のレコードが見つかります.
 
 
PHP_FALIAS(mssql_connect, sybase_connect, NULL)
...
PHP_FALIAS(mssql_deadlock_retry_count, sybase_deadlock_retry_count, NULL)

 
そこでmssql_を冒頭の関数はすべて注釈します.保存します.
phpのコンパイルを開始し、コンパイルパラメータはsybaseとmssqlのサポートを同時に追加します.
 
 
--with-sybase-ct=/opt/sybase/OCS-15_0
--with-mssql=/usr/local/freetds

 
続行
make && make install.
今回は警告メッセージが表示されませんでした.ひそかに喜ぶ!
テストコードテストを作成します.Sybaseとmssqlは接続できます.とうとう成功した.
 
添付:
Sybase接続は/opt/sybase/interfacでサーバ情報を構成する必要があります
mssqlリンクは/usr/local/freetds/etc/freetds.confでのサーバ情報の構成