WWWとデータベースの連携はWeb上での商業活動などで必ず必要になる技術です。山のようなソリューションが提示されていますが、今回はApache+PHP3にチャレンジしてみました。本当はLinuxなどで行った方がいいのでしょうが、うちにはPCが2台しかない上に片方はカミさんに占拠されているので、1台で全部行わなければなりません。Linux上ですべての作業を行うこともできるでしょうが、いかんせん慣れという問題があります。Linuxには秀丸(何でもこれで書いています)もありませんし、Linux自体の設定も危うい物があります。そこでちょっと変則的ではありますが、Linux上で動作するであろう環境をWindows上に構築するところから始めようと思います。
まず、目標を次のように立てました。WWWサーバーとしてインターネット上でもっとも広く使用されているApacheを動作させます。これに、データベースと接続してブラウザーに表示させるスクリプト言語としてPHP3を組み込みます。UNIX版のApacheの場合は、PHP3をモジュールとして組み込んで使用すると、いちいちプロセスをforkしないのでサーバーの負荷が軽減されると言う利点もあるようです。Windows版のApacheの場合はマルチスレッドで動作しているので、新たにプロセスが起動すると言うことはないでしょう。
このへんは不明ですが、とりあえずテスト環境としては問題ないでしょう。そして、これらと組み合わせて使用するデータベースシステムとして、InterBaseに白羽の矢を立てました。InterBaseは開発者ライセンスが、Delphiのプロフェッショナル版に附属しているので、試験運用をすることが出来ます。また、本格的に稼働させる時点でもInterBase4.0 for Linuxがフリーソフトとして配布されています。
現在、Apache の最新版は、1.3.9。PHP3 の方は、3.0.11 が最新版です。これらをWindows上で動作させてみます。両方ともWIN32版です。
入手先は以下の通りです。
Apache 1.3.9は Apache 公式サイトまたは、JApache 日本のApacheサイト
PHP 3.0.11は PHP 公式サイトまたは、PHP 日本の公式サイト
ついでに、PHPの日本語マニュアルもダウンロードしておきましょう。これは、PHP日本語ページから手に入ります。
まず、Apacheをインストールします。ダウンロードしてきた、apache_1_3_9_win32.exeを実行すると、通常のWindowsアプリケーションと同様にインストーラーの指示があるので、それに従って進めます。気をつけるのは、デフォルトのインストールディレクトリが c:\program files\apache group\apache となっているので、これを出来れば c:\apache か、c:\bin\apache などに変更しておいた方がよいでしょう。別段、動作に支障はありませんが、conf ファイルの編集などが面倒になるので私は c:\bin\apache にインストールしておきました。ちなみに、PHPのマニュアルなどでは c:\apache にインストールしてあるとして、説明がされています。
つぎに、PHP3 をインストールします。ダウンロードしたphp-3.0.11-win32.zip を c:\php3 または、c:\bin\php3 などに解凍します。マニュアル中では、c:\php3 にインストールしてあるとして、説明されています。私は、ルートディレクトリが混雑するといやなので、c:\bin\php3にインストールしました。
つぎに、php3ディレクトリにある php3.ini-dist を c:\windows ディレクトリ(windowsがインストールされているディレクトリで、win98などの場合もありますね)にコピーして、php3.iniにリネームします。マニュアルでは php3_dist.iniをどうのこうのと書いてあります、誤植のようです。今後のバージョンアップで別の名前になるかもしれませんが、だいたいファイル名から推測できると思います。
さらに、php3.iniファイルを編集します。ノートパッドなどのテキストエディタで開いてください。上から100行目ちょっとの所に、Paths and Directories というセクションがあり、その下に extension_dir = という所があります。ここに php3 をインストールしたディレクトリを記述します。私の場合は、extension_dir = c:\bin\php3 としました。
それから、その少し上にある、doc_root = という所に、Webサーバーのドキュメントルートを記述します。Apache の場合は、Apacheをインストールしたディレクトリの下に htdocs というディレクトリが作られているので、そこを指定します。わたしの場合は、doc_root = c:\bin\apache\htdocs となります。
最後に、PHP3 のモジュールを選択します。extension=php3_*.dll という行がずらっと並んでいるところがあるので、必要なdllのコメント(;のことです。)を外します。
しかし、ここで問題発生。目的とするInterBase用のモジュールがないのです。うーん、どうしてだろうか? Windows用Apacheにはないのかしら? しょうがないので、とりあえずここはそのままにしておいて、Apache に PHP3 を使うための設定を行います。
Apacheをインストールしたディレクトリの下に conf というディレクトリが作られています。Apache の設定ファイルはここにすべてあります。httpd.conf をエディタで開いて編集します。上から460行目あたりに、ScriptAlias という記述があります。ScriptAlias /cgi-bin/ "C:/bin/Apache/cgi-bin/"というのがそれです。""の中のディレクトリの指定はApacheをインストールしたディレクトリによって変わってきます。あれっと思うかもしれませんが、この httpd.conf の中では、ディレクトリを指定する際に使用する\はすべて/に置き換えてください。「これは仕様です」。
ここに、次の行を付け加えてください。
ScriptAlias /php3/ "C:/bin/php3/"
上の cgi-bin の行をコピーして書き換えればスペルミスもさけられます。当然、""の中は、php3をインストールしたディレクトリによって変わってきます。
それから、590行目くらいに、AddType application/x-tar .tgz という行があります。ここに、つぎの行を付け加えてください。
AddType application/x-httpd-php3 .phtml AddType application/x-httpd-php3 .php3 AddType application/x-httpd-php3-source .phps
.phtml と .phps の行はコメントアウトされているのを外すだけになっていました。.php3の行はコピーして書き換えてください。
最後に、640行目くらいに Action を記述するところがあります。
# Action lets you define media types that will execute a script whenever # a matching file is called. This eliminates the need for repeated URL # pathnames for oft-used CGI file processors. # Format: Action media/type /cgi-script/location # Format: Action handler-name /cgi-script/location
このコメントの下に以下の行を付け加えてください。
Action application/x-httpd-php3 "/php3/php.exe"
""の中は、ディレクトリではありません。先に指定した、ScriptAlias で指定したパスを使うよと言うことなので、このまま書けばOKです。
それでは、とりあえずPHP3が動くことを確かめましょう。次の内容のテキストファイルを php_test.php3 という名前で、Apache をインストールしたディレクトリの下にある htdocs ディレクトリに保存してください。
-----------------------------------------------------------
< HTML >
< HEAD >
< TITLE >PHP3のテストファイル < /TITLE >
< /HEAD >
< BODY BGCOLOR="#a3f1f8" >
< script language="php" >
echo ("some editors (like FrontPage) don't
like processing instructions");
< /script >
< /BODY >
< /HTML >
-----------------------------------------------------------
次に、htdocs にある index.html ファイルをエディタで開いて編集します。このファイルは、Apacheに接続したときにデフォルトで開かれます。一番下の方を書き換えて次のようにします。
< P > The Apache < A HREF="manual/index.html" > documentation< /A > has been included with this distribution. < /P > ----------------------ここから追加------------------------- < P > PHP3 Test < A HREF="php_test.php3" > PHP3 Test HTML< /A > < /P > ----------------------ここまで----------------------------- < P > The Webmaster of this site is free to use the image below on an Apache-powered Web server. Thanks for using Apache! < /P > < DIV ALIGN="CENTER" > < IMG SRC="apache_pb.gif" ALT="" > < /DIV > < /BODY > < /HTML >
さて、Apacheを起動してみましょう。とりあえず、Apache.exe を何も考えずにダブルクリックしてみましょう。DOS窓が起動して次のようなメッセージが表示されます。
Apache/1.3.9 (Win32) running...
これで、Apache が起動しました。Netscape(わたしの趣味でNetscapeですが、IEでも構いません)で接続します。URLを入力する欄に、http://127.0.0.1/と入力してリターンキーを押します。
It Worked! The Apache Web Server is Installed on this Web Site!
上のように表示されたらOKです。うまくいかないときは、もう一度設定を見直してみてください。また、ネットワーク関係の設定をしっかり行っていないと、当然うまく動きません。TCP/IPプロトコルがインストールされているか確認してください。インターネットに接続できているなら、おそらく問題は別の所にあると思われます。
Apache に接続できたら、PHP3 Test HTML というリンクをクリックしてください。
some editors (like FrontPage) don't like processing instructions Hi, I'm a PHP script!
上のように表示されましたか? これで、とりあえず Apache + PHP3 が正しく動いていることが確認できました。
さて、Apache + PHP3 が稼働したら、次はいよいよ本題のデータベースへの接続です。しかし、PHP3 のWin32版ではどうもInterBaseはサポートされていないようです。インターネット上の情報をいろいろあたってみても、UNIX版でもまだ暫定的なサポートしかされていないようです。そこで、とりあえずODBC用のモジュールを利用可能にして、Access2000で接続テストを行ってみました。
windowsディレクトリにある、php3.iniファイルをエディタで開いて、次の行の;を取って、コメントを外します。
;extension=php3_odbc.dll
これで、PHP3の準備はOKです。次に、Access2000で簡単なデータベースを作ってみます。からのデータベースを作成し、テーブルを新規作成します、テーブル名はT_Authorとします。テーブルの構造は以下の通りです。SQLで書いてありますが、Accessですからビジュアルテーブルデザイナーで作成しました。
//作家データのテーブル Create Table T_Author (Author_No Integer, //主キー用通しナンバー Family_Name VarChar(128), //著者姓(ex.宮澤) First_Name VarChar(128), //著者名(ex.賢治) Family_Yomi VarChar(128), //姓の読み(ex.みやざわ) First_Name VarChar(128), //名の読み(ex.けんじ) BirthDay Char(10), //生年(ex.1896 or 1896.08.27) DeadDay Char(10), //没年(ex.1933 or 1933.09.21) PRIMARY KEY(Author_No) )
テーブルを作成したら、いったん保存してから、データを一件入力します。とりあえず、サンプルなので何でもいいのですが、例のとおり宮澤賢治を入力してみました。データを入力したら、Accessを終了します。データベース名はlibrary.mdbとしておきます。
次に、ODBCの設定を行います。これには、コントロールパネルの「ODBCデータソース(32ビット)」を使用します。ユーザーDSNでないとうまく動かないと、どこかで見かけたので、とりあえずユーザーDSNの新規作成を行います。「追加」ボタンを押して、Microsoft Access Driver(*.mdb)を選択して「完了」ボタンを押します。データソース名を「LIBRARY」にして、データベースを「選択」ボタンを使って、先ほど作成したlibrary.mdbに設定します。「OK」ボタンを押せば、準備は完了です。
それでは、まえに作成した、Apacheのインストールディレクトリの下にあるhtdocsディレクトリのphp_test.php3ファイルを書き換えて、データベースにアクセスしてみます。以下のように書き換えてください。スクリプトの意味は、odbc_connect()でデータベースに接続します。いまは空になっていますが、2番目と3番目のパラメータはユーザー名とパスワードです。データベースに接続したら、odbc_exec()でSQLを発行します。その結果セットからデータを取得するのが、odbc_result()になります。最後に、odbc_close()で接続を閉じています。わかりにくいのは、文字列の接続演算子が"."であるということぐらいでしょうか。また、変数は整数と倍精度浮動小数点と文字列の三種類を扱えますが、整数型を文字列と結合すると文字列として扱ってくれるなど、バリアント型のような使い方が出来るようです。
-----------------------------------------------------------
< HTML >
< HEAD >
< TITLE >PHP3のテストファイル< /TITLE >
< /HEAD >
< BODY BGCOLOR="#a3f1f8" >
< script language="php" >
$cn = odbc_connect("LIBRARY","","",SQL_CUR_DEFAULT);
$qry_id = odbc_exec($cn,"SELECT Family_Name From T_Author");
$family_name = odbc_result($qry_id,"Family_Name");
echo ("< H2 >< I >名前は" . $family_name . "< /I >< /H2 >");
odbc_close($cn);
< /script >
< /BODY >
< /HTML >
-----------------------------------------------------------
このファイルを保存して、Apacheを起動し、ブラウザーからhttp://127.0.0.1/に接続して、PHP3 Test HTML というリンクをクリックしてください。画面に、「名前は宮澤」と表示されればOKです。ブラウザーから、ページのソースを見てみると以下のようになっています。
----------------------------------------------------------- < HTML > < HEAD > < TITLE >PHP3のテストファイル< /TITLE > < /HEAD > < BODY BGCOLOR="#a3f1f8" > ODBC接続ID = 1< H2 >< I >名前は宮澤< /I >< /H2 > < /BODY > < /HTML > -----------------------------------------------------------
きちんとスクリプトが解釈されて、HTMLに変換されているのがわかります。ここまでで、Apache + PHP3 + ODBCデータベースの接続に成功しました。
※補足
Apacheの起動にはスタートメニューから[Apache Web Server]-[Start Apache]をクリックして起動するのが正しいようです。また、Apacheを停止するにはコマンドプロンプトからApacheのディレクトリに移動して Apache -k shutdown を実行します。面倒なので、[Stop Apache]というメニュー項目を作っておくといいでしょう。
この原稿を書いたのは去年の暮れだったのですが、この間にPHP3は3.0.14にバージョンアップしています。