SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

PHP、MySQL、JavaScriptによるセキュアなインターネットファイル共有システムの作成

Smartyを利用したテンプレートとロジックの分離

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルソース (14.8 KB)

PHPを使い、データベース抽象化レイヤを取り入れて、HTMLのデザインをPHPプログラミングから切り離すセキュアなインターネットファイル共有アプリケーションを作成します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 私は最近、いつもの共有ディレクトリメカニズムを使ってファイル共有を実装することに嫌気がさしてきました。管理者レベルで定義するアクセス権が多すぎるだけでなく、異なるオペレーティングシステム間でファイルを共有するためのあらゆる処理が必要になります。その上、インターネット接続しか使用できないとしたらどうでしょう。もちろん、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システムを使用している場合は、次の手順に従います。

  1. Smartyの最新バージョンをダウンロードします。
  2. 選択した任意のディレクトリ(/usr/localなど)に、ダウンロードしたファイルを解凍します。本稿では、このディレクトリを[installation_dir]と表します。
  3. ディレクトリ[installation_dir]/smarty/templates_cと、[installation_dir]/smarty/cacheを作成します。

overLIBのインストール

 次に、overLIB JavaScriptライブラリをインストールします(overLIBについては後で詳しく説明します)。

  1. overLIBのzipファイルをダウンロードします。
  2. [document_root]ディレクトリに変更し、次のコマンドを実行します。
  3. mkdir overLIB
    cd overLIB
    
  4. overLIBのzipファイルを解凍します。

MySQLのインストール

 次のコマンドを実行してMySQLデータベーススキーマを作成します。

mysqladmin -u[user] -p[password] <file_sharing.sql

構成変数の設定

 ダウンロードしたソースコード内のファイル「inc.config.php」に示されているように、ローカルインストールに固有のグローバル変数があります。これらの変数を次の表1の推奨値に従って設定します。

表1 構成変数の推奨設定値
変数
$smarty_include_path[installation_dir]/smarty/libs
$pear_include_pathPEARをインストールする場合の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
$dsnmysql://db_user:db_password@db_server/file_sharing

 以上のインストールをすべて完了したら、http://yourserver/file_sharing/file_sharing.phpを呼び出し(図1を参照)、ファイルのアップロードを始めることができます(図2を参照)。

図1 ファイル共有アプリケーションのホームページ。アップロードされてタグ付けされたファイルと、使用されているタグのリストが表示される。
図1 ファイル共有アプリケーションのホームページ。アップロードされてタグ付けされたファイルと、使用されているタグのリストが表示される。
図2 ファイル共有アクションのポップアップ。ファイルをクリックするとポップアップが表示される。
図2 ファイル共有アクションのポップアップ。ファイルをクリックするとポップアップが表示される。
著者注
 Internet Explorerバージョン6および7は、W3Cの推奨とは逆に、ボタンの値ではなく、ボタンの内部テキストを送信します。そのため、本稿のサンプルでこれらのバージョンのIEを使いたい場合は、CSSのメリットの一部が犠牲になりますが、.tplファイル内のすべての<button>インスタンスを<input>で置き換える必要があります。

次のページ
コードの解説

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Roberto Giorgetti(Roberto Giorgetti)

イタリアに拠点を置くITマネージャ、テクニカルライター。主にビジネス分野と工業分野でオープンソースの開発に従事。核工学の学位を持つ。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2638 2008/07/01 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング