コードの解説
PHPコードはこのサンプルの「接着剤」となる部分です。ソースコードのアプリケーションルートディレクトリ下には4つのPHPファイルがあります。メインファイルは「file_sharing.php」で、このファイルによってインクルードされる他のすべてのファイルに「inc.*.php」という名前を付けることにしました。
ローカルインストールに固有のグローバル変数はすべて「inc.config.php」に入れました。つまり、本稿のダウンロードファイル(zipファイル)を解凍した後、このファイルに変数を適切に設定することでファイルを環境に適応させることができます。
「inc.vars.php」ファイルには、PHPセッション開始メカニズム(ここでは、タグソートとファイルソートのメソッドプロパティを渡す目的にのみ使用)と、便宜上必要なその他のグローバル変数、およびすべてのSmartyテンプレートに有効なグローバルな代入が含まれています。
「inc.util.php」ファイルには、主にコードの行数を削減することを目的とするいくつかのユーティリティ関数が含まれています。一部のルーチンはデータベースアクセスを実装するので、データベース抽象化レイヤの使用例として注目に値します。これらの関数はPEAR MDB2 APIを使ってMySQLにアクセスします(このアプローチの長所については、次のセクションで実装例を取り上げながら詳しく説明します)。
「file_sharing.php」ファイルは、すべてのHTTP要求を処理してGETメソッドまたはPOSTメソッドから渡された変数を構文解析する中心ファイルです。処理を構文解析した後、プログラムはイベントの管理に必要なデータをすべて取得して、そのデータをSmarty構造に割り当て、表示します。
PEARによるデータベース抽象化
PEARは、PHP開発をスピードアップできるPHPライブラリ(パッケージ)の巨大なリポジトリです。このプログラムでは、メインのPEARパッケージは、データベース抽象化の最新ソリューションであるMDB2ライブラリです。この例ではMySQLデータベースを使いますが、このソリューションはコードに少し変更を加えるだけで、他の環境(例えば、Oracleをデータベースとする企業など)でも実行できます。MySQLの関連するPEARコンポーネントをインストールした後で別のデータベースを使用するために必要なことは、「inc.config.php」内の$dsn変数の値を変更することだけです。この変数には、DSNのドキュメンテーションに記載されているルールに従って有効なデータソース名(Data Source Name:DSN)を入れる必要があります。
MySQLに使用したDSNは次のとおりです。
$dsn = 'mysql://user:password@mysql_server/mysql_db_name
つまり、データベース呼び出しはすべて、基礎となっているデータベースに関して完全に透過的です。
MySQLの代わりに別のデータベースを使いたい場合は、同じデータベーススキーマを作成する必要があります。もちろん、ファイル「file_sharing.sql」は有効ではありませんが、このファイルには、別のRDBMSを使ってデータベースを構成するために変換しなければならないSQLステートメントが含まれています。
ファイルの暗号化による機密保護
このファイル共有アプリケーションの例では、128ビットキーのAES(Advanced Encryption Standard)アルゴリズムを使って、パスフレーズを暗号化形式(RFC 3174セキュアハッシュアルゴリズムに記載されているSHA1 160ビットチェックサムを使用)で保存することで、ファイルを必要に応じて暗号化形式で保存することができます。暗号化されたファイルの操作には必ずこれらのパスフレーズが必要なので、次の重要なガイドラインを覚えておきましょう。
- パスフレーズを失うとファイルをダウンロードできなくなるので、MySQLコマンドでファイルを削除しなければなりません。さらに、データとパスフレーズは平文でインターネット上を移動します。対応策として、インターネット上で送信する前に、JavaScript関数を使ってローカルでデータの暗号化とパスワードのハッシュ化を行うことをお勧めします。
- MySQLの代わりに別のデータベースを使いたい場合は、PHPコードで暗号化とハッシュ化に使用されているMySQL関数を同等の関数に置き換える必要があります。
