PHPLIB 7.4インストール

 PHPからPostgreSQLに接続してテーブルなどを利用するには、pg_〜という専用の命令を使わなければならない。この場合、途中でPostgreSQLを止めてOracleに移行すると、すべてのPHPスクリプトをOracle用の命令に書き直さなければならない。
 PHPLIBを使うと、データベースの違いを意識することなくPHPスクリプトを作成できる。(本来はセッション管理などを容易に行うためのものらしい・・・)
 なお、このページではApache1.x系で説明しているが、Apache2.x系でもちゃんと動くようである。Apache2.x系で設定する場合、/usr/local/apache/usr/local/apache2に読み替えること。

1.PHPLIBのインストール

用意したソースを/usr/local/src/phplibに配置し、解凍する。

# mkdir /usr/local/src/phplib-7.4
# cd /usr/local/src/phplib-7.4
# tar zxvf phplib-7.4.tar.gz

解凍後、Apacheのディレクトリに移動し、シンボリックリンクを作成する(他のバージョンに簡単に切り替えるため)。

# cd ..
# mv phplib-7.4 /usr/local/apache/
# ln -s phplib-7.4 /usr/local/apache/phplib

2.PHPLIBの設定

 PHPLIBはPHP3で使えるように作られているので、PHP4で使えるように修正しながら設定を行う。
 まず、PHPLIB内のスクリプトの拡張子が.php3なので、.phpに変更する。非常に多くのファイルがあるため、シェルスクリプトを作成し、一度に作業ができるようにする。
 任意のフォルダ(例、/root)にphp32php.shというファイルを以下の内容で作成する。

#!/bin/sh
#ファイルの拡張子.php3を.phpに変更
#ファイルの内容の.php3を.phpに変更
for f in *.php3
do
mv $f `basename $f .php3`.php
done
/usr/bin/perl -pi -e 's|.php3|.php|g' *

保存したら、ファイルに実行権をつけ、作業を行う。

# chmod 755 /root/php32php.sh
# cd /usr/local/apache/phplib/php
# /root/php32php.sh
# cd ../pages
# /root/php32php.sh
(adminディレクトリ、menuディレクトリをチェックできないためエラーが出るが、無視)
# cd admin
# /root/php32php.sh
# cd ../menu
# /root/php32php.sh

次に、設定ファイル(prepend.php)を編集する。

# vi /usr/local/apache/phplib/php/prepend.php

「$_PHPLIB["libdir"] = ""; 」という行を探し、次のように修正する。

$_PHPLIB["libdir"] = "/usr/local/apache/phplib/php/";

引き続き、「require($_PHPLIB["libdir"] . "db_mysql.inc");」という行を探し、次のように修正する。

require($_PHPLIB["libdir"] . "db_pgsql.inc");

上記修正が終われば、変更を保存する。

3.接続データベースの設定

local.incファイルを、SampleDBデータベースに接続するように編集する。これにより、どのPHPファイルからもlocal.incに設定されているデータベースに接続するようになる。
(この作業はrootで行う)

# vi /usr/local/apache/phplib/php/local.inc

「class DB_Example extends DB_Sql」に続く行を、以下のように修正する。

class DB_Example extends DB_Sql {
 var $Host = "サーバのIPアドレス又はホスト名";
 var $Database = "SampleDB";
 var $User = "nobody";
 var $Password = "";
}

4.PHPスクリプトでPHPLIBを使うための設定

PHPスクリプトを実行する際、prepend.phpファイルが自動的にスクリプトの先頭に追加されるよう、php.iniファイルを編集する。

# vi /usr/local/lib/php.ini

「auto_prepend_file = 」という行を探し、次のように修正する。

auto_prepend_file = /usr/local/apache/phplib/php/prepend.php

引き続き、「;include_path = ".:/php/includes"」という行を探し、次のように修正する。

include_path = ".:/usr/local/apache/phplib/php/"

上記修正が終われば、変更を保存する。以上の設定を反映させるため、Apacheを再起動しよう。

5.確認

PHPLIBを利用してPHPスクリプトが記述できるかを確認する。以下のスクリプトを作成し、db_select2.phpという名前でドキュメントルートに格納し、ブラウザからブラウズする。
(※赤字の部分は、環境に応じて編集する)

<?php
  //DenpaDBのクラスを定義
  $db = new DB_Example;
  $db->query("set datestyle to 'ISO';");
?>
<HTML>
<HEAD><TITLE></TITLE></HEAD>
<BODY>
<?php
  $tbl_name = "テーブル名";
  $sql = "SELECT * FROM $tbl_name";
  $db->query($sql);
  while ($db->next_record())
  {
    echo $db->f(1);
    echo "<BR>\n";
  }
?>
</BODY>
</HTML>

エラーメッセージが出ずに、指定した表の1列目のデータが表示されればOK!

※ここで指定するテーブル名は、nobodyユーザがselect権限を持つテーブルでなければならない。

6.PHPLIBを使うメリット(自論)

冒頭でも触れたが、PHPLIBは本来、PHP3ではできなかったセッション管理を簡単(?)に実現するためのライブラリである。しかし、PHP4ではセッション管理がサポートされたため、PHPLIBを使う必要性はないと思われる。(実はセッション管理を利用したことがないんです・・・)
私の場合はセッション管理よりも、PHPLIBを使うことによって移植性が高まることに注目して利用している。では、なぜ移植性が高まるのだろうか?

1.PHPスクリプトにサーバ名やデータベース名を記述する必要がない

上のサンプルスクリプトを見て分かるとおり、PHPスクリプト自身はサーバ名やデータベース名を持っていない。これは、例えばテストサーバを立ててそのサーバのデータベースにアクセスするスクリプトを作ったとする。PHPLIBを使わない場合、各スクリプトファイルにサーバ名などのデータを持つため、本番稼動で別のサーバとデータベースを使うとき、全てのスクリプトファイルを編集しなければならない
ところがPHPLIBを使えば、local.incファイルの設定を変更するだけで、接続先を変更できる。

2.違うデータベースに移植する際にも、スクリプトの変更が必要ない

PostgreSQLデータベースに接続するにはpg_connectという命令を利用する。これらpg_〜という各命令は、PostgreSQLに接続するための専用の命令である。データベースサーバとしてずーっとPostgreSQLを使い続けるならそのままでも問題はないが、例えばデータベースをMySqlやOracleに置き換えることになったらどうなるだろうか。
Oracleデータベースへの接続も、やはりOracle専用の命令を使わなければならない。つまり、PHPスクリプトを全て編集しなおさなければならないのだ。しかも、データベース独自の命令もあるため、例えばPostgreSQLにあってOracleにない命令を使っている場合、そのロジックを作り直さなければならなくなる。
PHPLIBを使ったサンプルでは、PostgreSQL独自の命令は使っていない。つまり、接続先データベースが変わっても、スクリプトを編集する必要がないということである。

3.コーディング量が少ない

PHPLIBを使ったサンプルにはデータベースへの接続・切断の処理がなく、いきなりSQLを発行していることに気がつくだろうか?PHPLIBを使うと、データベースへの接続処理を自動でやってくれるため、つながらなかった場合の処理などを記述する必要がない。よって、PHPLIBを使う場合と使わない場合とでコーディング量がぜんぜん違ってくるため、開発が楽になる。

まとめ

以上の理由により、私は(セッション管理を行わなくても)PHPLIBを使っている。

まとめ・2

最近、PHPのpearを使って同様なことができることを知った。セッション管理を行わないならpearのほうが楽そう。こちらでの設定もそのうち紹介したい・・・


[ TOP ]