5

PHPWebベースのアプリケーションの構造の「ベストプラクティス」を構成するものについて混乱しています。このサイトを読んで、いくつかの提案があります。よく言及される構造の1つは、「ドキュメントルート内にphpファイルがない」というものです。これは良い習慣のように聞こえますが、どのように機能するかはわかりません。Webサーバーはドキュメントルートの外部にあるものを認識しません。ここでは、ドキュメントルートがパブリックアクセスディレクトリであり、次のようになっていると仮定します。

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

または、上記の例の「app」はドキュメントルートであり、htdocsdirはサイト構造の公的にアクセス可能な領域です。

続いて、 htdocs以外のdirのファイルでパブリックアクセスが利用できないようにするにはどうすればよいですか?

4

2 に答える 2

7

概念は単純です。特に、フロントコントローラーベースのフレームワークを使用する場合は、それが独自のものであろうと既存のフレームワーク(Zend Frameworkなど)であろうと関係ありません。すべてのリクエストが中央コントローラを経由する場合、リクエストを処理するために必要なファイルが必要に応じて含まれます。インクルードされたファイルは、機能するためにWebルートにある必要はありません。それらを含めて実行するには、コントローラーで使用できる必要があります。したがって、コントローラーのみがWebルートに存在する必要があります。他のすべてはそれの外にある可能性があります。

参考までに、これは非OOPアプリケーションでも機能します。各ページに必要なファイルを含めるだけです。

Webルートにある必要があるのは、ブラウザによって要求される画像、スタイエルシート、JavaScriptファイルなどのアセットです。

于 2012-05-13T03:05:11.777 に答える
5

Webサーバーがドキュメントルートの「外部」にあるものを認識しないのは事実ですが、これは、HTTPリクエストを介してユーザーがリクエストしたファイルにのみ適用されます。

PHPはWebサーバー内で実行され、ドキュメントのルートとURLの概念はありません。Webサーバーのホストオペレーティングシステムの基盤となるファイルシステムと、特定の標準に準拠したデータの送受信のみが表示されます。PHPがWebベースの制限に拘束されるのは、Webサーバー自体がchrootjail内で実行されている場合のみです。

そのため、ファイルシステムのどこにでもphpファイルを置くことができ、パーミッションが正しいと仮定すると、PHPはそれに到達して実行することができます。そのファイルがドキュメントルートの完全に外側の500レベルの深さのディレクトリに埋め込まれているかどうかは関係ありません。到達可能であれば、PHPで実行できます。

于 2012-05-13T04:10:00.923 に答える