このドキュメントでは、PHP から Empress データベースをアクセスするための セットアップ方法および簡単なアクセステストについて説明します。
PHP からのEmpress の利用は、ODBCドライバマネージャ (unixODBC)を介して、 Empress ODBC インターフェイスにアクセスする方法になり、 必要なソフトウェアの組み合わせとしては、PHP + Apache + Empress + unixODBC になります。 (以前のバージョンでは専用のPHPのドライバを提供していましたが、 現在の バージョン 8.62 では、PHP の専用のドライバは提供しておりません。 詳しくは 「PerlからEmpressの利用について」 の「はじめに」を参照してください。)
次の章では、セットアップ方法について説明しますが、Apache からの PHP の呼び出しは、 DSO (Dynamic Shard Object) で行います。呼び出しに関してはこれ以外にも2つ方法があり、 スタテックにモジュールとしてApache に組み込み方法とCGIとして利用する方法がありますが、 DSO が現在一般的であるため、この方法を用いることにします。
PHP から Empress をアクセスするためには、以下のソフトウェアが必要になります。
apache のPHP のバージョンは4.X を使用します。現在(2004/07)の最新は PHP4.3.8 です。 PHP は、http://www.php.net/downloads.php からダウンロードできます。
Linux/Unix ODBC ドライバマネージャとして、unixODBCを使用します。 (ODBCドライバマネージャとして iodbc でも問題ないようですが稼動確認をしていません。)
現在(2004/07) の最新バージョンはunixODBC-2.2.9 です。 unixODBC は、http://www.unixodbc.org からダウンロードできます。
Apache は一般的であるため、このドキュメントではインストールに関して説明いたしません。 既にインストールされていることを前提としますが、DSOを使用するためには mod_so が 有効であることが必要です。
この確認は、"httpd -l" を実行し、有効なモジュールリストに mod_so.c が含まれているか を調べます。(httpd はApache をインストールしたディレクトリの /binの下にあります。)
mod_so が含まれていれば、DSOでのPHPの呼び出しが可能ですのでそのまま、その apache を使用します。 含まれていない場合は、make し直す必要があり、コンフィグレーション時 (configure) の オプションに"--enable-module=so"を指定することでmod_soが組み込む設定を行います。
以降でPHPおよびunixODBCのインストールの説明をしますが、 先にこのドキュメントを記述するためにインストールをおこなったマシン環境を紹介します。
先に unixODBC をインストールします。
ソースパッケージを展開し、READMEファイルに書かれている手順に従いインストールします。
ex. unixOBDC のインストール例
% cd /usr/local/src
% tar xfz /tmp/unixODBC-2.2.9.tar.gz
% cd unixODBC-2.2.9
% ./configure
% make
% su
# make install
デフォルトでは /usr/local 以下にインストールされます。
また、./configure でエラーになる場合は、エラー内容にもよりますが、
以下のオプションを試してみてください。
% ./configure --enable-gui=no --enable-drivers=no
PHP をインストールするためには、先に Apache と unixODBC をインストールする必要があります。
PHPのコンフィグレーションでは、PHPをDSOモジュールとして make する必要があるため、 コンフィグレーション(configure)のオプションにApache の apxs の指定と データベースインターフェイスにunixODBC を使用することを以下のようにオプションとして指示します。
$./configure --with-apxs=Apache をインストールしたディレクトリ/bin/apxs \
--with-unixODBC=unixOBDC をインストールしたディレクトリ
DSO
ex. PHP のインストール例
※ Apache は /usr/local/apache にインストールされているとします。
unixODBC は /usr/local にインストールされているとします。
% cd /usr/local/src/php
% tar xvfz /tmp/php-4.3.8.tar.gz
% cd php-4.3.8
% ./configure --with-apxs=/usr/local/apache/bin/apxs --with-unixODBC=/usr/local
% make
# su
# make install
以上でインストールは完了です。
ODBC を利用するためには、ODBCの環境設定ファイル(odbcinst.ini と odbc.ini)の設定が必要です。
unixODBC マネージャからEmpress ODBC ドライバを呼び出すために、 Empress ODBCドライバの情報を odbcinst.ini ファイルに登録します。 odbcinst.iniファイルは、デフォルトでは$ODBCHOME/etc/odbcinst.ini (例の環境では/usr/local/etc/odbcinst.ini)にあります。 以下に設定例を示します。
ex. odbcinst.ini のEmpress ODBC ドライバの設定例
#---------
[Empress]
Description = Empress ODBC Driver
Driver = /home/empress/Empress/v8.62/installation/shlib/libempodbccl.so
Setup = /home/empress/Empress/v8.62/installation/shlib/libempodbccl.so
FileUsage = 1
#---------
'[ ]' で囲まれた中にドライバ名として "Empress"を指定します。 それ以降にEmpressドライバの情報を記述します。 Description は説明(コメント)、 DriverにはEmpress ODBC ドライバのシェアードライブラリのパスを指定します。 ($EMPRESSPATH/shlib/libempodbccl.so) SetupもDriverと同じシェアードライブラリファイルのパスを指定します。 FileUsageには "1" を設定します。
|
[ 参考 ]
"odbcinst.ini"のパラメータについてのunixODBCのマニュアルの記述を要約すると "setup" は、新たにDSNを追加するためのODBCConfig(GUIツール)の「追加」ボタンを 押したときに使用されるライブラリでODBCConfig(GUIツール)を使用していない環境 では重要ではありません。最も重要なパラメータは "driver"で、 SQLConnectまたは SQLDriverConnectがコールされた時にドライバマネージャは動的に 指定されたライブラリをロードします。その指定が間違っている場合は動作しません。 "fileusage"は、odbcinst プログラムによって追加されます。テキストエディタを使って 編集した場合は、自分自身で追加する必要があります。 |
odbc.iniファイルは、ODBCデータソース(DNS)を定義します。 このファイルは、デフォルトでは$ODBCHOME/etc/odbc.ini (例の環境では/usr/local/etc/odbc.ini)にあり、 unixODBC および Empress ODBCドライバの両方が参照します。 以下に設定例を示します。
ex. odbc.ini のODBC データソースの設定例
#---------
[testdb]
Description = Test to Empress
Driver = Empress
Database = /home/empress/testdb
Server = 192.168.3.183
Port = 6322
#---------
'[ ]' で囲まれた中にデータソース名を記述し、それ以降にデータソースの定義を記述します。 これらのパラメータは、Description, Driver を除いて Empress ODBC ドライバが参照する パラメータになります。 Description は、説明(コメント)です。Database はアクセスするデータベースのパス、 Server は、ODBC サーバーのアドレスまたはホスト名、Port はODBCサーバーのポート番号を 指定します。 Driver は unixODBC が使用し、値はodbcinst.ini で設定したEmpressドライバの名前と 関連付けられます。
PHPの"make install"を実行することで指定されたApacheの環境にPHPのモジュールが インストールされ、Apache のコンフィグレーションファイル (httpd.conf)も設定が 追加されます。
httpd.conf に以下のPHPの定義があれば、コメントを外し、有効にします。
ex. httpd.conf PHPの定義
# And for PHP 4.x, use:
#
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Apache を再起動させる前にいくつかの環境変数を設定する必要があります。
unixODBC が必要な環境変数として、ODBCHOME があります。 設定する値はunixODBC がインストールされた ディレクトリを設定します。
ex. 環境変数 ODBCHOMEの設定例
例では unixODBC は /usr/local 以下にインストールされています。
% export ODBCHOME=/usr/local
Empress ODBC ドライバが必要な環境変数としてMSODBCINIFILE があります。 設定する値は、odbc.iniファイルへのパスを指定します。
ex. 環境変数 MSODBCINIFILE の設定例
例では odbc.iniファイルは /usr/local/etc/odbc.ini にあります。
% export MSODBCINIFILE=/usr/local/etc/odbc.ini
|
[ 参考 ]
例では、Empress が使用可能なユーザーでの設定例になります。 そのため、既にEmpressを使用するために必要な環境変数 EMPRESSPATH と LD_LIBRRY_PATH (Empressシェアードライブラリへのパス) が設定済みということが前提となっています。 Empressを使用する環境を設定していないユーザーでのODBCの設定の場合は、 EMPRESSPATH と LD_LIBRRY_PATHを設定してください。
ex. 環境変数 EMPRESSPATH と LD_LIBRRY_PATH の設定例
例では Empress は /home/empress/Empress/v8.62/installation
以下にインストールされているとします。
% export EMPRESSPATH=/home/empress/Empress/v8.62/installation
% export LD_LIBRRY_PATH=$EMPRESSPATH/shlib
(2) unixODBC のコンフィグレーション時にprefixを指定した場合、シェアードライブラリの 環境変数 LD_LIBRARY_PATHの指定が必要になる場合があります。
% export LD_LIBRRY_PATH=$LD_LIBARRY_PATH:$EMPRESSPATH/shlib
(3) LD_LIBRARY_PATH の定義をシステムの定義として /etc/ld.so.conf に設定しても構いません。 |
環境変数の設定が終了したら、Apache を再起動します。
% Apache のインストールされているディレクトリ/bin/apachectl stop % Apache のインストールされているディレクトリ/bin/apachectl start
先にPHPのインストールが成功したかどうかを確認します。
以下の1行を記述したファイルをApache のドキュメントルート以下に置きます。 ファイル名のサフィックスには、httpd.conf で定義したPHPのサフィックスをつけます。 (例えば "info.php")
<? phpinfo() ?>
ブラウザからApacheにアクセスし、作成したシートを参照します。
PHPの情報が表示されれば、PHPは動作しています。
テストとしてサンプルプログラムを実行して、Empressのデータベースにアクセスしてみます。
サンプルプログラムを実行する前にEmpress ODBC サーバーが動作しているかを確認します。 Empress サーバー管理者でログインし、以下のコマンドで確認します。 (Empress サーバーの詳細は「コネクティビティ(ODBC)サーバーの利用について」を参照してください。) また、サンプルプログラムからODBCサーバーにアクセスするためのユーザーと パスワードをEmpressサーバーのパスワードファイルに設定されていない場合は、 こちらも合わせて設定してください。
ex. Empress サーバーの確認
# empsvadm empodbcsv info
ログイン:empress
パスワード:XXXXXXX
サーバ名: empodbcsv
サーバタイプ: odbc
スプール PID : 359
管理ポート: 6321
サービスポート:6322
#サービスサーバ最少/最大/起動中: 3/257/3
サーバ ID PID #クライアント
--------- ---------- -------------
4 363 0
3 362 0
2 361 0
1 360 1
-------------
総クライアント: 1
クライアント ID PID 開始 名前
--------------- ---------- -------- --------------------
1000001* 358 18:14:12 empress(empress@localhost)
#
ex. ユーザーの登録
# emppassword empodbcsv add empress
新 Empress パスワード:XXXXXXX
新 Empress パスワード再入力:XXXXXXX
Done.
#
※ アクセスするEmpress ODBC サーバーは、Ruby ODBC 環境をインストールしたマシン以外でも構いません。
Empress ODBC サーバーが起動されているマシン上にサンプルで使用するデータベースを作成します。 単純なテーブルを作成し、データを挿入します。
ex. サンプルデータベースの作成
% empmkdb testdb
% empsql testdb
EMPRESS V8.62
(c) Copyright Empress Software Inc. 1983, 2003
1* create t1 (no, name nlschar);
2* display t1 all;
*** Table: t1 ***
Attributes:
no integer
name nlscharacter(25,1)
Creator: empress
Lock Level: RECORD
Table #: 15
Records: 0
Record size: 28
3* insert into t1 values (1, 'あああ');
4* insert into t1 values (2, 'いいい');
5* select * from t1;
no name
1 あああ
2 いいい
6* exit
%
以下は、PHP ODBCインターフェイスのサンプルプログラムです。
ex. ODBC サンプルプログラム -- odbc.php
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=x-euc">
<title>PHP ODBC Example</title>
</head>
<body>
<h3>PHP ODBC Example: Select data from database</h3>
<?php
$connect = odbc_connect("testdb", "empress", "emp123");
if(!$connect){
?>
Error connecting to database!<br>
<?php
} else
{
?>
Connecting to database successfully!<br>
<?php
}
$result = odbc_exec($connect, "select from t1");
while(odbc_fetch_row($result)){
$id = odbc_result($result, 1);
$d = odbc_result($result, 2);
print("$id $d $ch<br>");
}
odbc_free_result($result);
odbc_close($connect);
?>
</body>
</html>
このサンプルで確認が必要な箇所は、odbc_connect のパラメータ(DNS、ユーザー、パスワード) になります。 "testdb"は odbc.ini ファイルに設定したデータソース名になります。 ユーザーとパスワードは、Empress ODBC サーバーのパスワードファイルに登録した ユーザー・パスワードを指定します。
サンプル(odbc.php) をブラウザから参照し、以下のように表示されれば、 Empress ODBC サーバーに接続が成功し、サンプルデータベースからのデータ取得ができています。
PHP ODBC Example: Select data from database Connecting to database successfully! 1 ああああ 2 いいいい
以下は、PHP PEAR DBIのサンプルプログラムです。
ex. PEAR DBI サンプルプログラム -- dbi.php
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=x-euc">
<title>PHP PEAR DBI Example</title>
</head>
<body>
<h3>PHP PEAR DBI Example: Select data from database</h3>
<?php
$dbUser = "empress";
$dbPass = "emp123";
$dbHost = "localhost";
$dbName = "testdb";
$dbType = "odbc";
include("DB.php");
db = DB::connect("$dbType://$dbUser:$dbPass@$dbHost/$dbName");
$sql = "SELECT * FROM t1";
$result = $db->query($sql);
while ($row = $result->fetchRow()) {
echo "$row[0] $row[1] <br>";
}
$db->disconnect();
?>
</body>
</html>
サンプル(pear.php) をブラウザから参照し、以下のように表示されれば、 Empress ODBC サーバーに接続が成功し、サンプルデータベースからのデータ取得ができています。
PHP PEAR DBI Example: Select data from database 1 ああああ 2 いいいい