访问DOCUMENT_ROOT之外的PHP类文件

Ste*_*oke 5 php apache structure

我对基于PHP网络的应用程序结构的"最佳实践"的构成感到困惑.阅读本网站有很多建议.经常提到的一个结构是"文档根目录中没有任何php文件".虽然这听起来像是一种很好的做法,但我看不出它是如何工作的 - Web服务器无法识别文档根目录之外的任何内容.我假设文档根目录是公共访问目录,如下所示:

app-
  |
  - htdocs - document root
  | |
  | - index.php
  | - css/
  | - images/
  |
  - PHP classes in here/
  - Other PHP classes in here.../
Run Code Online (Sandbox Code Playgroud)

或者上面示例中的"app"是文档根目录,而htdocs目录是站点结构的公共可访问区域吗?

接下来,我如何确保除了htdocs之外的目录中的文件没有公共访问权限?

Joh*_*nde 7

这个概念很简单,特别是如果您使用基于前端控制器的框架,无论是您自己的还是现有的(如Zend Framework).当所有请求都通过中央控制器时,必要时会包含处理请求所需的文件.包含的文件不必在Web根目录中工作.它们只需要可供控制器使用即可包含然后执行.因此,只有您的控制器需要位于Web根目录中.其他一切都可以在它之外.

仅供参考,这也适用于非OOP应用程序.您只需要在每个页面中包含所需的文件.

Web根目录中需要的是浏览器请求的任何图像,样式表,javascript文件等.


Mar*_*c B 5

虽然Web服务器无法识别文档根目录之外的任何内容,但这仅适用于USER通过HTTP请求请求的文件.

PHP在Web服务器中运行,没有文档根和URL的概念.它只能看到网络服务器主机操作系统的底层文件系统,以及符合某些标准的进出数据.PHP受限于某些基于Web的限制的唯一时间是Web服务器本身是在chroot jail中运行的.

因此,您可以在文件系统上放置一个php文件ANYWHERE,并且假设权限正确,PHP将能够访问它并运行它.如果该文件被隐藏在完全位于文档根目录之外的500级深度目录中并不重要 - 如果它可以访问,则PHP可以运行它.