PHP からの Empress の利用について(Linux/Unix)

第1版 2004/08

1. はじめに

このドキュメントでは、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 が現在一般的であるため、この方法を用いることにします。

2. セットアップ方法

2.1 準備

PHP から Empress をアクセスするためには、以下のソフトウェアが必要になります。

2.2 インストール環境の例

以降でPHPおよびunixODBCのインストールの説明をしますが、 先にこのドキュメントを記述するためにインストールをおこなったマシン環境を紹介します。

マシン環境によっては、セットアップ手順どおりではインストールできない可能性も あるとは思いますが、その点は上記の環境下での説明ということでご理解ください。

2.3 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

2.4 PHP のインストール

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

以上でインストールは完了です。

3. ODBCの設定

ODBC を利用するためには、ODBCの環境設定ファイル(odbcinst.ini と odbc.ini)の設定が必要です。

3.1 odbcinst.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 プログラムによって追加されます。テキストエディタを使って 編集した場合は、自分自身で追加する必要があります。

3.2 odbc.ini ファイルの設定

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ドライバの名前と 関連付けられます。

4. Apache の設定

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

5. 環境変数の設定

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を使用するために必要な環境変数 EMPRESSPATHLD_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 に設定しても構いません。

6. Apache の再起動

環境変数の設定が終了したら、Apache を再起動します。

   % Apache のインストールされているディレクトリ/bin/apachectl stop
   % Apache のインストールされているディレクトリ/bin/apachectl start

7. PHP の動作確認

先にPHPのインストールが成功したかどうかを確認します。

以下の1行を記述したファイルをApache のドキュメントルート以下に置きます。 ファイル名のサフィックスには、httpd.conf で定義したPHPのサフィックスをつけます。 (例えば "info.php")

	<? phpinfo() ?>

ブラウザからApacheにアクセスし、作成したシートを参照します。

PHPの情報が表示されれば、PHPは動作しています。

8. サンプルプログラムでのODBCアクセステスト

テストとしてサンプルプログラムを実行して、Empressのデータベースにアクセスしてみます。

8.1 Empress ODBC サーバーの確認

サンプルプログラムを実行する前に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 環境をインストールしたマシン以外でも構いません。

8.2 サンプルデータベースの作成

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
  %

8.3 サンプルプログラム1 (PHP ODBC インターフェイス)

以下は、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 いいいい 

8.3 サンプルプログラム2 (PHP PEAR DBI)

以下は、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 いいいい 

Copyright Empress Japan. 2004