はじめに
私は最近、いつもの共有ディレクトリメカニズムを使ってファイル共有を実装することに嫌気がさしてきました。管理者レベルで定義するアクセス権が多すぎるだけでなく、異なるオペレーティングシステム間でファイルを共有するためのあらゆる処理が必要になります。その上、インターネット接続しか使用できないとしたらどうでしょう。もちろん、EメールやFTPを使うことはできますが、必ずしもスマートな解決策ではありません。
そこで、ようやくPHPを使う気になったのです。次のことをすべて実行するPHPファイル共有プログラムを作成しました。
- ブラウザでファイルをアップロード/ダウンロードする
- これらのファイルをメタデータと一緒にリレーショナルデータベース管理システム(Relational Database Management System:RDBMS)に格納する
- 可能な場合はファイルを暗号化して圧縮する
- ファイル整理に関しては階層アプローチ(ディレクトリ)を避け、ファイルにラベルでタグ付けをし、まったく異なる方法で分類する
基本的なプログラムを完成させた後、次の最適化ガイドラインに従ってプログラムをアップデートしました。
- コード行数を削減する
- 一般的なRDBMSを使う
- HTMLコードを切り離し、できれば、自分よりももっと詳しい人に託す
- 言語を混在させずにJavaScriptポップアップとのインタラクションのワークフローを短くする
本稿では、インターネット上でのファイル共有の実践例として私なりに最適化したPHPプログラムを紹介します。ここでは、オープンソースのライブラリとフレームワークを統合して、データベース抽象化レイヤを使い、アプリケーションロジックをプレゼンテーションから切り離す方法を実証します。MVC(Model Control View)パラダイムの非常に優れた実装というわけではありませんが、オープンソースの各種ヘルパパッケージの統合がどのように働き、いかに負担を軽減するかを示します。
必要なもの
- PHP 5.Xモジュールが組み込まれた稼働中のApache 2.Xインスタンス
- PHPがサポートするRDBMSデータベース(この例ではMySQL 4.Xを使用)
- PEAR
- Smartyパッケージ
- overLIBパッケージ
- インターネット接続
クイックスタートのためのインストール手順
このサンプルプログラムのサーバーインフラストラクチャには、PHPコードを実行できるWebサーバーが必要です。また、選択したRDBMSのサポートによってPHPインタープリタをコンパイルする必要があります。この場合は、LAMPフレームワーク、つまり、Linux(Debian)、Apache、MySQL、そして言うまでもなく、PHPを選びました。次のインストール手順は、Apache 2.X、PHP 5.X、MySQL 4.Xがインストールされ、インターネット接続が確立されていることを前提とします。
始めに、本稿のサンプルコードをダウンロードし、次のコマンドを実行してWebサーバーのドキュメントルート(以降、[document_root])下に「file_sharing.zip」ファイルを解凍します。
unzip file_sharing.zip
PEAR MDB2のインストール
PEARパッケージをインストールするには、PHPバージョン4.3.0またはそれ以上をインストールした場合に利用したインストーラが必要です。
pear install MDB2 pear install MDB2#mysql
Smartyのインストール
Debian環境にSmartyテンプレートエンジン(Smartyについては後で詳しく説明します)をインストールするには、次のコマンドを実行します。
apt-get install smarty
他のLinuxシステムを使用している場合は、次の手順に従います。
- Smartyの最新バージョンをダウンロードします。
- 選択した任意のディレクトリ(/usr/localなど)に、ダウンロードしたファイルを解凍します。本稿では、このディレクトリを[installation_dir]と表します。
- ディレクトリ[installation_dir]/smarty/templates_cと、[installation_dir]/smarty/cacheを作成します。
overLIBのインストール
次に、overLIB JavaScriptライブラリをインストールします(overLIBについては後で詳しく説明します)。
- overLIBのzipファイルをダウンロードします。
- [document_root]ディレクトリに変更し、次のコマンドを実行します。
- overLIBのzipファイルを解凍します。
mkdir overLIB cd overLIB
MySQLのインストール
次のコマンドを実行してMySQLデータベーススキーマを作成します。
mysqladmin -u[user] -p[password] <file_sharing.sql
構成変数の設定
ダウンロードしたソースコード内のファイル「inc.config.php」に示されているように、ローカルインストールに固有のグローバル変数があります。これらの変数を次の表1の推奨値に従って設定します。
変数 | 値 |
$smarty_include_path | [installation_dir]/smarty/libs |
$pear_include_path | PEARをインストールする場合のMDB2.phpファイルのコピー先 |
$overlib_path | /overLIB |
$template_dir | [document_root]/file_sharing/smarty/templates |
$config_dir | [document_root]/file_sharing/smarty/configs |
$cache_dir | [installation_dir]/smarty/cache |
$compile_dir | [installation_dir]/smarty/templates_c |
$dsn | mysql://db_user:db_password@db_server/file_sharing |
以上のインストールをすべて完了したら、http://yourserver/file_sharing/file_sharing.phpを呼び出し(図1を参照)、ファイルのアップロードを始めることができます(図2を参照)。