将核心类放在Web根目录之上 - 好主意还是坏主意?

时间:2010-09-06 02:39:12

标签: php

我们正在开发几个在我们自己的服务器上运行的Web应用程序,它们将共享许多核心类作为其MVC设置的一部分。

我正在考虑将这些类放在Web根目录之上,这样所有应用程序都可以使用一个副本自动加载()这些类,而不用担心同步问题。

专门的课程将放在他们相关的网页目录中,但是共享库会放在/ var / www / shared-libraries或类似的东西下。

除了可能会因为代码不好而同时崩溃所有网站之外,还有什么理由让我不想走这条路吗?

感谢。

2 个答案:

答案 0 :(得分:2)

Zend Framework正在使用该技术,这使得整个应用程序可以安全地输出敏感的PHP代码作为纯文本,因为一切都在文档根目录之外,并使用mod_redirect来了解要分派的模块/控制器/操作。

基本项目布局类似于

application
- controllers
- views
- - scripts
public
- .htaccess 
- index.php
library
- Zend

并且在您的包含路径中使用../library,您可以轻松地从应用程序的任何位置自动加载所有Zend类(例如Zend_View)。当然,Zend还为视图助手和其他自定义类前缀提供了类自动加载器,但这不在问题范围内。

由于所有内容都在文档根目录(/ public)之外,因此用户可以看到的唯一脚本(如果出现问题且用户开始看到公开的PHP代码)是对应用程序引导程序和其他初始化行的调用(ig)包括路径和一些常量,但你也可以通过包含另一个外部文件来初始化所有这些......)。

简而言之,将核心类放在文档根目录之外是一个好主意和一个好习惯。然后,您只需要在包含路径列表中添加共享库的路径,例如:

set_include_path(implode(PATH_SEPARATOR, array(
    LIBRARY_PATH,
    get_include_path(),
)));

其中LIBRARY_PATH是共享库的相对路径或绝对路径。

但请注意,您添加的路径越多,自动加载类就越慢。优良作法是在那里只有3条或更少的路径。看看Zend如何通过autoloaders设法解决这个问题。

答案 1 :(得分:1)

这不仅是一项很好的技术,而且每次都可以做到这一点!

你永远都不知道什么时候你会遇到一个禁用PHP的sys-admin-of-hell,并让Apache将文件保存为全文! ;)

我亲身体验过这段经历。一切都很安全,因为没有任何代码被输入用户。