[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への接続も確認できていません。
すごく不確かなことかもしれませんが、今後構築される参考にしていただければ
と思います。
それでは失礼致します。