[PHP-users 1446] Re: PHPとPostgres

HIRANO Nobuaki php-users@php.gr.jp
Thu, 23 Aug 2001 18:31:00 +0900


はじめまして、平野と申します。

現在、テスト環境としてPHP−Sybaseを構築しています。
それぞれのソースが古いかもしれませんが、ご了承下さい。
また、ご質問の内容では、rpmパッケージで入れられているので
参考にならないかもしれません。
少しお役に立てればと思いメールを出させていただきました。
内容はSybaseが中心です。

まず構築の環境ですが、
OS:RedhatLinux6.2J
Apache:apache-1.3.17.tar.gz
PHP3:php-3.0.15-i18n-ja.tar.gz
PHP4:php-4.0.6.tar.gz
PostgreSQL:postgresql-7.0.2-patched.tar.gz
Sybase(ASE):sybase-ase-11.0.3.3-1.i386.rpm

を使っています。
SybaseはWebサーバとはわけて別でDBサーバを立て、そこにアクセスしに行きます。
Sybaseのrpmパッケージを用意したのはDBのクライアントとなる
Webサーバにも、外部DBに接続するために必要なもようです。

別のSybaseのDBサーバは、WindowsNT4.0で動作中。文字コードはSJIS。

PHP3とPHP4を入れる必要があるのか?とか、
PostgreSQLとSybaseの2つがいるの?ってのはおいといてください。
PHP4徹底攻略という本を参考にしながら構築を行いました。

Apacheのconfigure。
OPTIM="-O2" ./configure --enable-module=so

Sybaseのインストールと設定。

rpm -ivh sybase-ase-11.0.3.3-1.i386.rpm

でインストールし後は、ASE用のアカウントであるsybaseというアカウントを
自動作成してくれてインストール先は、「/opt/sybase」(デフォルト)となりま
す。
各種設定は、詳しくは書きませんが、文字コードを選択する場面があるので、
一応接続するDBに合わせて「SJIS」にそろえることにします。

インストールが終了したら、
interfacesファイルというのが「/opt/sybase」直下にあるのでエディタで
interfacesファイルを開きます。そこに接続したいDB先を指定します。以下
(このファイルはSybaseのWindowsのクライアントにあるsql.iniと同じようなものっ
ぽいです)

HOGEHOGE
     query tcp ether HOGEHOGE 5000

意味は、最初の「HOGEHOGE」がWebサーバで使用する接続先DB名。
「query」と「master」というのがあるのですが、
WebサーバのSybaseにアクセスすることになるので、「master」は記述しませんでし
た。
「tcp ether」は、(たぶん…)TCP/IPプロトコルを利用してつなぎますよって意味
でしょう(汗)
その次の、「HOGEHOGE」は実際のDBサーバで使われている名前になります。
その次の数字はDBサーバにつなぐためのポート番号です。
それらがそろえば、「isql」コマンドで一度つなぎにいってみましょう。
それでつながれば、PHPのインストールにいきます。

#この時にはPostgreSQLはすでにインストールしています。

PHP3をインストールする際のconfigureですが

./configure --with-pgsql="/db/pgsql" \ 
--with-sybase="/opt/sybase" --enable-track-vars \
--with-apxs=/usr/local/apache/bin/apxs \ 
--enable-i18n --enable-mbregex --enable-versioning --without-gd

としました。
また、Sybaseのオプションは、--with-sybase-ctで行うようなのですが、
それでインストールするとApacheが起動しなくなるという不具合があるため、
--with-sybaseでインストールしました。
PHPの最新のバージョンでは改善されているらしいですが。。。

PHP4をインストールする前にPHP4のソースを展開した後、

# cd php-4.0.6/ext/sybase/

に移り「 php_sybase_db.c 」というファイルがあるのでその中に  
「DBSETLAPP(sybase.login,php_sybase_module.appname);」と書かれた行があり、
その次のラインくらいに

DBSETLCHARSET(sybase.login,"sjis");と、

この1行書き加える必要があります。
これを書かなかった場合、PHPのバージョンにもよるみたですが、インストールに入
る前に、
Sybaseでの文字コードが問題になってくるかもしれません。

Warning: Sybase message: Character set conversion is not available between 
client character set 'iso_1' and server character set 'sjis'. (severity 11) 
↑こんな感じのエラーです

私の場合”SJIS”で統一されているので、それでアクセスするように
設定しました。

その後、PHP4をインストールしてみました。
configureはこんな感じです。

./configure --with-pgsql="/db/pgsql" --with-sybase-ct="/opt/sybase" \
--enable-track-vars --with-apxs=/usr/local/apache/bin/apxs \
--enable-versioning --without-gd \
--enable-trans-sid --enable-mbstring --enable-mbstr-enc-trans

「--enable-mbstring」、「--enable-mbstr-enc-trans」この2つのオプションは
php-4.0.6から対応されたマルチバイト、日本語を対応させるためのオプションみた
いです。

これで一応の構築が終了したので、

<? phpinfo(); ?>

とかかれたPHP3とPHP4のファイル(phpinfo.php3とかphpinfo.php)
を作成してPHPが動いているのを確認後、

<html>
<?
 $ret = sybase_connect("サーバ名","ユーザID","パスワード");
 if(!$ret){
 echo "<center>DBへの接続に失敗しました。</center><br>\n";
 echo "RET: $ret <br>\n";
 exit;
 }else{
 echo "RET: $ret ";
};

 ?>
</html>

って感じのPHP3とPHP4のファイルを作成して接続確認。
#この時、PHP4で文字コードのエラーがでたので、苦労しました。

成功すると、1と帰ってきます。失敗したら何も帰って来ません。

一応こんな感じで組みました。
これが組みあがったのが、つい、おとついなので
まだ実際にプログラムを組んでWebアプリを作成していませんし、
PostgreSQLへの接続も確認できていません。

すごく不確かなことかもしれませんが、今後構築される参考にしていただければ
と思います。

それでは失礼致します。