我们正在开发几个在我们自己的服务器上运行的Web应用程序,它们将共享许多核心类作为其MVC设置的一部分。
我正在考虑将这些类放在Web根目录之上,这样所有应用程序都可以使用一个副本自动加载()这些类,而不用担心同步问题。
专门的课程将放在他们相关的网页目录中,但是共享库会放在/ var / www / shared-libraries或类似的东西下。
除了可能会因为代码不好而同时崩溃所有网站之外,还有什么理由让我不想走这条路吗?
感谢。
答案 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将文件保存为全文! ;)强>
我亲身体验过这段经历。一切都很安全,因为没有任何代码被输入用户。