目次

1. クイックスタート

この章は、PHPLIBのインストールを10分で行うことができるようにするもので、 簡単なテストの手順の概要説明を行い、PHPLIBの機能概要にも触れています。

1.1 ライセンス

PHPLIB は、このディレクトリおよび そのサブディレクトリにあるファイルから構成されます。 PHPLIBは、このディレクトリの ファイル COPYING に詳述された LIBRARY GNU General Public License のもとで フリーソフトウエアとして利用可能です。 また、PHPLIBは、有用であることを期待して配布されていますが、 「無保証」です。商習慣及び特性の目的に沿ったいかなる暗黙の補償も 行いません。詳細は、ライセンスを参照下さい。

1.2 対象とするグループおよびスキル

PHPLIB は、PHP アプリケーションの開発者を対象としています。 使用者は、PHP 言語に関して充分な知識、つまり、 少なくともSQLデータベースに関する基本的なノウハウと 本ライブラリを使用可能とするためのWebサーバーの設定法について の基本的な知識が必要です。

本ライブラリは、中型から大型のデータ駆動型のwebアプリケーションを 書く際に有用です。 "中型から大型のアプリケーション"とは、複数回のデータベースクエリーを 行うアプリケーションのことで、 データベースデータから表を作成し、 SQLクエリーを生成するためのユーザーインターフェースや ページやページの機能を充分かつ容易に保護する手段が必要です。 "データ駆動型" のアプリケーションとは、 HTMLコンテンツを作成する際にサポートされるSQLデータベースを利用し、 データベースのトランザクションを駆動するためにHTMLフォームを 使用するアプリケーションのことです。

本ライブラリを利用するには、当然、最近の版のPHPインタプリタを インストール済みのWebサーバーにアクセスする必要があります。 (本ライブラリのこのバージョンでは、3.0.12以降を推奨します。 また、サポートされるSQLデータベースにアクセスする必要があります。 (現在、PHPLIB は、MySQL, PostgreSQL, mSQL, Oracle 7 および Oracle 8, Sybase, Microsoft SQL Server ,ODBC データベースをサポートしています。) 使用者についてそのデータベースについてデータベースの作成および破棄が 行える必要があり、Web サーバーのユーザーについては、このテーブルにおいて SELECT, INSERT, UPDATE , DELETE 文を実行できる必要があります。

本マニュアルにおいては、MySQL を使用していることを仮定します。 PHPLIB はサポートされるどのSQLサーバーでも実行可能ですが、 PHPLIB の開発には MySQL が使用されています。

PHPLIB は、CGI のPHP やApache に組み込む mod_php と組み合わせることが可能です。 CGI版を使用した場合、持続的データベース接続が使用できないため、 全般的な速度に関する影響があります。 我々は個人的には様々な理由 (更新が容易でかつApache suexecと共に実行可能) によりCGI版を使用していますが、CGI 版よりも Apache モジュールを推奨します。

PHP 4 はまだβ版です。 β版のソフトウエアに対応したライブラリの開発は行われません。

1.3 簡易インストールガイド

以下の手順は、PHPLIB を CGI版のPHPにより実行する場合に 適用されるものです。 しかし、多くの記述はmode_php でも同様に有効です。 非常に重要な注意事項: この文章は、Webサーバー、PHPインタプリタ、データベースサーバーを完全に 制御可能な状態でインストールが行われることを想定した 簡易版インストールガイドです。 インストール時に制約が課される レンタル Web サーバーに 関しては適用できません。 完全なインストール手順およびトラブル解決策に関する情報に ついては、この文書の第2章を参照下さい。

PHPLIBをインストールする前に、Webサーバーを起動し、 拡張子 .php3 を付けたファイルを実行してみてください。 その際、<?php phpinfo() ?> という簡単なスクリプトを 作成してください。 また、"/" で終わる URL に関するデフォルトファイルとして Webサーバーが index.html と同様に index.php3 を認識することを確認して下さい。 (Apache: DirectoryIndex index.html index.php3)

MySQLデータベースサーバーを入手し、実行して下さい。 空のデータベースをアプリケーション用に作成し、Web サーバープロセスの 所有者から SELECT,INSERT, UPDATE , DELETE 命令が使用可能であることを確認してください。 user および db テーブルの変更後に mysqladmin reload を実行するのを忘れないようにして下さい。

手順 1

Webサーバーのルートディレクトリと同じレベルに php という名前のインクルードディレクトリを 作成して下さい。 このインクルードディレクトリは、Webサーバーのドキュメントルート の下に置かないで下さい。

手順 2

PHPLIB 配布ファイルを展開して下さい。 ディレクトリ php の中身を上記手順で作成した ディレクトリ php に移動して下さい。

手順 3

自分のWebサーバーに関するPHP インタプリタの設定ファイル php3.ini を入手し、 include_path 命令が上記の php ディレクトリを指すように更新します。 また、auto_prepend_file 命令が そのインクルードディレクトリの中の prepend.php3 ファイルを指すように更新します。

php3.ini ファイルを更新することができない場合は、 上記の 非常に重要な注意事項 を読んでいないことになります。

手順 4

track_vars が有効であり、 magic_quotes_gpc が有効になっていることも確認して下さい。 これ以外にもアプリケーションからメールを送信する計画がある場合には、 sendmail_path も確認することになるでしょう。 多くの UNIX システムでは、このオプションは /usr/lib/sendmail -t に設定することにより動作します。

php3.ini ファイルを更新することができない場合は、 上記の 非常に重要な注意事項 を読んでいないことになります。

手順 5

php インクルードディレクトリに cd を行います。local.inc を編集します。 class DB_Example にはデータベース接続用の適当なパラメータ が示されています。

手順 6

ここで使用するデータベース(MySQL)の場合、 配布ファイル中の create_database.mysql を実行し、 active_sessions および auth_user を作成します。 auth_user は、名前が kris 、パスワードが test のサンプルユーザーが入力されて公開されます。

手順 7

pages ディレクトリおよび そのサブディレクトリの内容をドキュメントルートディレクトリに移動します。

手順 8

クッキーを使用可能にして、Webサーバーの URL "/" にアクセスします。 index.html がない場合、index.php3 が表示されます。 ページをリロードした際に、表示される number は増加します。 mysql コマンドクライアントでデータベースに接続し、 select * from active_sessions を実行します。 自分のブラウザ用のセッションレコードが1つそこにあることを確認し、 ページを再ロードし、select * from active_sessions を再度行った際に val のテキストがどうなるかを見てください。 これが動作している場合、セッションクラスはクッキーモードで動作しています。

手順 9

次に showoff.php3 にアクセスします。 名前 kris 、パスワード test でログインします。 active_sessions を再度確認して下さい。 この時、Example_Session エントリ (name カラム参照) および Example_User エントリがテーブル中にある必要があります。 両方とも再ロード時に増加します。

手順 10

クッキーを無効にして再度試してください。 新しいセッションを得ることになり(クッキーは失われます)、 URLのgetパラメータ部にセッションIDを見ることができます。

1.4 PHPLIB の基本機能の使用法

多くのアプリケーションは、PHPLIB の先進機能を使用しておらず、 PHPLIB をページを保護したり、パスワードを付加する機能に関して 有用であると考えています。 このセクションは、そうした PHPLIB の基本機能を網羅します。

ログインスクリーンのカスタマイズ

要求に合わせるには インクルードディレクトリの loginform.ihtml を編集して下さい。

許可レベルのカスタマイズ

local.inc を編集し、 クラス Example_Perm を自分の許可属性を表す数値に変更して下さい。 auth_user にあるユーザーは、そのリストの中にカンマで 区切られた1つ以上の名前を有している必要があります。 エラーメッセージを変更するには、 perminvalid.ihtml を編集して下さい。

新規ユーザーの作成

配布ファイル中の pages/admin ディレクトリから new_user.php3 を使用してください。 インストール手順に従うことにより、 WebサーバーのURL /admin の下に新規ユーザーが利用可能となります。

マニュアルでユーザーを作成するには、ユーザーIDを得るために print md5(uniqid("some magic string") を実行し、 insert into auth_user values ( "得られたユーザーID", "username", "password", "permissions"); を行って下さい。

保護無しセッションページの作成

ページの始めに次のように書きます。


<?php page_open(array("sess" => "Example_Session")); ?>

ページの終わりに次のように書きます。


<?php page_close(); ?>

保護付きセッションページの作成

ページの始めに次のように書きます。


<?php
  page_open(
    array("sess" => "Example_Session",
          "auth" => "Example_Auth",
          "perm" => "Example_Perm"));
  $perm->check("desired protection");
?>

ページの終わりに次のように書きます。


<?php page_close(); ?>

保護付き機能の作成

ページの始めに次のように書きます。


<?php
  page_open(
    array("sess" => "Example_Session",
          "auth" => "Example_Auth",
          "perm" => "Example_Perm"));
?>

ページの終わりに次のように書きます。


<?php page_close(); ?>

保護される機能は次のように記述します。


<?php
  if ($perm->have_perm("desired protection")):
?>
保護付きのHTMLまたはPHPをここに置きます。
<?php
  endif
?>

注意: desired protection は、 Example_Perm に記述した許可属性の 組み合わせです。 Example_Perm のデフォルトの値を使用した場合、 "user", "user,author" , "admin" が 有効な値の全てです。 ユーザーは、$perm->check() または $perm->have_perm() コールで 要求された全ての許可属性を有している場合にのみページにアクセス可能です。

注意: ユーザーは、auth_user の perms カラムに複数の許可属性を 有することが可能です。 "user,author,editor" という perms を有するユーザーは これらの許可属性の組み合わせを要求される全てのページにアクセス可能です。

注意: スペースを使用してはいけません。"user,author,editor" は動作しますが、 "user, author, editor" は動作しません。

注意: $auth->auth["uid"] が 保護付きのページで設定され、かつ (time < auth->auth["exp"]) の場合にのみ 認証結果は有効になります。 ユーザ名として $auth->auth["uname"]、 ユニークなユーザーIDとして $auth->auth["uid"]、 そのユーザーの現在の許可属性として $auth->auth["perm"] を使用可能です。 実際、 $auth->auth["perm"] を直接いじる必要はなく、 情報を得るには $perm->have_perm("...") を利用します。

PHPLIB を理解する

この文章を読んでください。次にソースを読んでください。 そして、この文章を再度読んでください。 Session->serialize() と Auth->start() のコードは見難いです。 CVS アカウントを取得し、コードを提供してください。有名になれます。 フェラーリのように。

注意: どんな変数が登録されるかを知りたい。 フォーム変数とセッション変数がページにインポートされる 順番を理解したい。 フォーム変数からセッション変数に値がそれ自体の値を失わずに どのようにコピーされるかを理解したい。 持続的なフォーム変数を作成したくない。 このような場合には、上記のようにすると幸せな生活をおくることができます...

1.5 テスト

以下の手順は、PHPLIB を CGI PHP と実行する場合に適用されます。 しかし、手順の多くは mod_php でも有効です。 この節は、上記のインストール手順が失敗した場合に、 インストール時の問題を基本的なところから検討することにより 見つける手法を示します。

サポート用のメーリングリストがアドレス phplib@lists.netuse.de にあります。このリストに加入するには、 コマンド subscribe をアドレス phplib-request@lists.netuse.de に送付して下さい。

Webサーバーの起動・動作を確認する

Webサーバーが起動しているか、 設定した仮想ホストが動作しているかを確認して下さい。 これを行うには、 小さなファイル test1.html を DocumentRoot に作成し、 test1.html により Web サーバーにアクセスしてみて下さい。

WebサーバーがCGIプログラムを実行しているかどうかを確認する

Webサーバーが起動し、CGIが実行できることを確認して下さい。 現在のディレクトリ、実行するプログラムの UID/GID を確認し、 環境変数を見て下さい。 次のシェルスクリプトをインストールして下さい。


#! /bin/sh --
 
echo "Content-Type: text/plain"
echo
id
echo
pwd
echo
env | sort
echo

これをCGI用ディレクトリにcgi-testという名前で置き、 ドキュメントルートに cgi-test.cgi という名前で置いて下さい。 実行許可を与えて下さい。 /cgi/cgi-test?par1=one&par2=two および /cgi-test.cgi?par1=one&par2=two にアクセスし、 出力を確認して下さい。 実行ユーザーの UID/GIDは、pwd の出力は、設定されている環境変数は? QUERY_STRING はどのようになっていますか? PATH 変数はどうなっているか、 LD_LIBRARY_PATH 変数はどうなっているか、 PHP により必要とされる全てのライブラリがCGI環境で実行中のPHPにより アクセス可能であるか (PHP上でUNIX ldd コマンドを実行することにより確認します) を確認下さい。

特に、Oracle サポート機能をPHPに組込み、 libclntsh を動的にリンクしている場合、 そのライブラリはCGI環境からロード可能ですか? そうでない場合、 PHPは次のステップに進むことはできません。

PHPインタプリタの実行を確認する (CGI 版 PHPの場合)

PHPバイナリをCGIバイナリ用ディレクトリにコピーしてください。 (このディレクトリはDocumentRoot以下に置くべきではありません!) そして、実行可能にして下さい。 php3.ini を同じディレクトリにコピーしてください。 DocumentRoot に test2.php3 を作成し、<?php phpinfo() ?> と中に書いて下さい。

Apache を実行していますか? その場合は、次の記述を設定ファイルに加えてください。


Action       php3-script /cgi/php
AddHandler   php3-script .php3
DirectoryIndex index.php3 index.html index.htm
FancyIndexing on

これにより、 .php3 で終わるファイルへの全てのリクエストは php3-script ハンドラにマップされ、 内部的にリクエスト php3-script を処理するURLとして /cgi/phpが定義されます。

/test2.php3 へのリクエストを行い、 実行されているかを確認して下さい。 (いくつかの色の定義に関して) php3.ini を変更し、再ロードして下さい。 その変更は、phpinfo() の出力に反映されていますか? そうでない場合、その php3.ini は見つけられおらず、 問題があります。 適当な設定を行い再コンパイルして下さい。

phpinfo() の出力を注意深く確認して下さい! PHP は最新版ですか? (このリリースは PHP 3.0.12 で開発され試験されています) 使用するデータベースインタフェースがphpinfo() の出力に 表示されていますか?そうでない場合は再コンパイルして下さい。

同様にURL /cgi/php/test2.php3 として/test2.php3 にアクセスすることができますか? 出来る場合は、 --enable-force-cgi-redirect を付けて PHP インタプリタが コンパイルされていません。 PHPLIB は、このインタプリタでは動作しません。 このスイッチを付けて再コンパイルして下さい。

PHP インタプリタ (mod_phpの場合)

サーバーが既に正確に設定されていることを仮定し (srm.conf中にPHPに関する記述を書くことを忘れないで下さい!)、 次のファイルを入力し、DocumentRoot にtest2.php3として保存します。


<? phpinfo() ?>

webブラウザを用いてこのファイルにアクセスできる場合、 PHP、Apacheおよびその環境についての多くの情報を得ることができるはずです。

PHPLIB のインクルードを確認する

PHPはPHPLIBを正しく読みこんでいますか? php3.ini ファイルを確認して下さい。 このファイルに次のように設定を行っておく必要があります。


include_path = 全ての .inc ファイルがあるディレクトリへのパス名
auto_prepend_file = prepend.php3 へのパス
track_vars = On

次の設定も記述する必要があります。


magic_quotes_gpc = On

PHPLIBが適当に設定されている場合、次のページはエラーなく実行可能です。


<?php
$db = new DB_Example;
print "It works without error messages.<br>\n";
 ?>

データベースとの接続を確認する

PHPLIB のインストールには、local.inc が正しく設定されている必要が あります。 特に、提供されたクラス DB_Example は使用するデータベース接続に 合わせてカスタマイズする必要があります。 Webサーバーが次のページのデータベースをアクセスできるかどうかテストして下さい。


<?php
  include("table.inc"); // 動作させるには、include_path に記述する必要があります。

  $db = new DB_Example;
  $db->query("select * from auth_user");

  $t = new Table;
  $t->heading = "on";
  $t->show_result($db);
?>

正しく実行された場合、このページには、テーブル auth_user から kris に関するユーザーエントリにパスワード test、 許可属性 admin が表示されます。 そうならない場合、local.incDB_Example の定義が 壊れています。

セッションの動作を確認する

配布ファイルと共に提供されているページ /index.php3 を アクセスして下さい。 このページは、ブラウザにクッキーを設定します。クッキーの設定を許可して下さい。

このページは、カウンタ付きのヘッドラインを表示します。 ページを再ロードしてください。カウンターは増加するはずです。 増加しない場合、ブラウザがクッキーを正しく処理できないか、PHPLIBが データベースのテーブル active_sessions を正しく読み書き できていないかのどちらかです。 phpinfo() の出力を見てクッキーが設定されているかどうかを 確認して下さい。 (4番目のテーブルにクッキーと他のコール毎のデータが表示されます。) コマンドラインからデータベースに接続し、データベースの許可属性を確認して下さい。

認証の動作を確認する

配布ファイルで提供されている /showoff.php3 をロードしてみてください。 このページはログインを要求します。 kris としてパスワード test を用いてログインして下さい。 ログインが成功したら、 セッション毎のカウンタとユーザー毎のカウンタを再度見て下さい。 ページを再ロードして下さい。 カウンタは増加するはずです。

ログインできない場合、おそらくクッキーに問題があります。 ブラウザがセッションクッキーを受け付け送信することを再度確認して下さい。 他の問題としては、テーブル auth_user へのアクセスが 考えられます。 このテーブルに対してSELECT が可能である必要があり、 ログインするユーザーのエントリを有している必要があります。


目次