ディレクトリ構成の考え方

Webサーバ上にあって、Webブラウザから実行されるPHPプログラムは、サーバ上で何のアクセス制御もしていない場合は、
通常DocumentRoot?以下の「.php」ファイルすべてが対象となります。
Webアプリケーションの規模が拡大し、PHPファイルの数が増加すると、Webサーバへの入り口(アクセスポイント)が増えるために、
サーバへのアクセスが統制できなくなり、セキュリティ的にもリスクが高くなります。
そのため、クライアントからアクセスできるアクセスポイントは必要最小限まで減らし、Webブラウザからのアクセスは
限定したアクセスポイントを必ず通るようにして、その部分のみを集中して管理する仕組みが必要になります。
Magic3フレームワークでは、「include」という直接アクセス不可のディレクトリ領域を設けて、システムの機能本体は
その「include」ディレクト以下に作成し、Webブラウザからアクセスする場合は、用途別のアクセスポイントを必ず経由してから
「include」以下のサーバ機能本体を実行する仕組みになっています。
アクセスポイントは用途別に以下の通りです。

  • index.php - PC用アクセスポイント(PC用一般ユーザ向け画面)
  • connector.php - サーバ連携アクセスポイント(サーバ間データ連携インターフェイス)
  • m/index.php - 携帯用アクセスポイント(携帯用一般ユーザ向け画面)
  • admin/index.php - システム管理機能
  • admin/install.php - システムインストーラ機能

プログラムの内容はすべて同一で以下のようなものです。
一旦、起動マネージャー(LaunchManager?)に処理を渡して、起動マネージャーが「include」以下の本体プログラムを実行します。

// 定義ファイル読み込み
require_once(dirname(__FILE__) . '/include/global.php');

// プログラム実行
$gLaunchManager->go();

この仕組みでは、起動マネージャーですべてアクセスを集中管理できます。
また、サーバへのアクセスの停止、再開は単にアクセスポイントファイルの削除、再生だけで行えます。

「include」ディレクトリ以下のphpプログラムは何も設定しない場合だとクライアントから実行されてしまうので、
Apacheの設定で「include」という名前のディレクトリにアクセスできないようにするか、または以下のように、
「include」ファイル以下のphpファイルの先頭にプログラムを追加しておきます。

// 直接アクセスの防止
defined('M3_SYSTEM') or die('Access error: Direct access denied.');
directory.gif

直接アクセス可能なディレクトリの内容

  • templates - 画面デザインテンプレート?の格納ディレクトリです。
    このディレクトリ以下の各ディレクトリがそれぞれ1つのデザインテンプレート?を構成します。
  • widgets - 画面の機能を構成するウィジェット部品の格納ディレクトリです。
    このディレクトリ以下の各ディレクトリがそれぞれ1つのウィジェットを構成します。
  • scripts - Javascript等のスクリプトを格納します。
    格納するスクリプトは主にシステム全体共通に使用するものです。
  • image - システム用の画像格納用ディレクトリです。システム全体で共通的に利用する画像ファイルを格納します。
  • resource - ユーザ用のファイル管理ディレクトリです。コンテンツで必要な画像、動画等のファイルを格納します。(リソースディレクトリ?)
  • admin - 管理者機能にアクセスするためのアクセスポイントファイルを格納します。
    管理者機能の実体はこのディレクトリ以下には実装しないで、「include」ディレクトリ以下に置きます。
  • index.php - デフォルトでアクセスされるアクセスポイントファイルです。
    index.php以外にアクセスポイントを増やす場合には、このファイルを複製して同ディレクトリに置きます。

直接アクセス不可ディレクトリ(include以下)の内容

  • container - フレームやウィジェット作成のベースクラスとなるコンテナクラスを格納します。
  • db - DBアクセスのためのBaseDBクラスを格納します。
  • manager - Magic3フレームワークシステムが提供するサービスを利用するためのマネージャークラスを格納します。
  • addonns - 単一インスタンスで共通的に利用するクラスを格納します。
    クライアントからのアクセスで自動的にインスタンス生成されます。
  • lib - PHP用の様々なライブラリを格納します。
  • conf - ライブラリ用の各種設定ファイルを格納します。
  • sql - Magic3用のテーブルの構築用、データ作成用のSQLスクリプトを格納します。