2012-05-13 7 views
5

PHPウェブベースのアプリケーションの構造については、「 ベストプラクティス」の何が構成されているのか混乱します。このサイトを読むにはいくつかの提案があります。 1つの構造は、 "ドキュメントルートの中にPHPファイルがない"ということです。これは良い習慣のように聞こえるが、どのように動作するのかわからない。ウェブサーバーはドキュメントルートの外側に何も認識しない。公にDOCUMENT_ROOTの外部にあるPHPクラスファイルにアクセス

app- 
    | 
    - htdocs - document root 
    | | 
    | - index.php 
    | - css/ 
    | - images/ 
    | 
    - PHP classes in here/ 
    - Other PHP classes in here.../ 

それとも上記の例では「アプリ」は、ドキュメントルートで、のhtdocs dirがあるということです:私は、そのドキュメントルートは、パブリックアクセスのディレクトリで、ここで、以下のようにのようなものを想定してサイト構造のアクセス可能領域

それ以降は、以外のディレクトリにあるファイルに対してパブリックアクセスを使用できないようにするにはどうすればいいですか?htdocsどうしますか?

答えて

7

コンセプトはシンプルです。特に、フロントコントローラベースのフレームワークを独自のフレームワークか既存のフレームワーク(Zend Frameworkなど)を使用する場合は、コンセプトは単純です。すべての要求が中央コントローラを介して来たとき、要求を処理するのに必要なファイルが必要に応じて含まれる。含まれているファイルは、動作するにはWebルートにある必要はありません。それらは、コントローラに含まれて実行されるだけで利用できる必要があります。したがって、あなたのコントローラーだけがWebルートに存在する必要があります。他のすべてはそれの外にあることができます。

FYI、これは非OOPアプリケーションでも動作します。それぞれのページに必要なファイルを含めるだけです。

ウェブルートにある必要があるものは、ブラウザによって要求される画像、スティールシート、javascriptファイルなどのようなものではありません。

+0

迅速な回答ありがとうございます!私はOOPアプリケーションで** include **ステートメントを使用しません。私は** require_once **を使用します。必要に応じて、それぞれのクラスにはrequire_once文があります。これは、必要なクラスへのアクセスから記述するコントローラの能力に影響しますか? –

+0

Nope。彼らは根本的に同じことをします。 –

+0

ありがとうございます。私はあなたの解決策を試し、その結果を元に戻します。 –

5

ウェブサーバーは、ドキュメントルートの「外部」には何も認識しませんが、HTTPリクエストによってUSERによって要求されたファイルにのみ適用されます。

PHPはWebサーバー内で実行され、ドキュメントのルートとURLの概念はありません。 Webサーバーのホストオペレーティングシステムの基礎となるファイルシステムと、特定の標準に準拠して出入りするデータのみを認識します。 PHPがWebベースの制限によって縛られる唯一の時間は、Webサーバー自体がchroot jail内で実行されているかどうかです。

このように、ファイルシステムにはANYWHEREというファイルを置くことができ、アクセス権が正しいと仮定すると、PHPはそのファイルにアクセスして実行することができます。もしそのファイルが到達可能であれば、PHPはそれを実行することができます。

+0

ああ、これは概念上、上記の回答と似ています。ユーザーベースの要求がドキュメントルートに解決される限り、すべてが正常である必要があります。追加情報ありがとうございます。私はまだこれに戻る機会がありませんでしたが、あなたのコメント(および上記のコメント)に基づいた解決策がどのようになっているかをお知らせします。 –

+0

ありがとうございます - 上記のとおり、ソリューションはうまくいきました。 –