我们正在开发几个在我们自己的服务器上运行的 Web 应用程序,这些应用程序将共享许多核心类作为其 MVC 设置的一部分。
我正在考虑将这些类放在 Web 根目录之上,以便所有应用程序都可以仅使用一份副本来 autoload() 这些类,而不必担心同步问题。
专用类将位于其相关的 Web 目录中,但共享库将位于 /var/www/shared-libraries 或类似目录下。
除了可能会因为一行错误的代码而导致所有网站同时崩溃之外,还有什么理由让我不想走这条路呢?
Thanks.
Zend框架正在使用该技术,这使得整个应用程序不会以纯文本形式输出敏感的 PHP 代码,因为所有内容都位于文档根目录之外,并使用 mod_redirect 来知道要分派到哪个模块/控制器/操作。
基本的项目布局看起来像
application
- controllers
- views
- - scripts
public
- .htaccess
- index.php
library
- Zend
并拥有../library
在您的包含路径中,您可以轻松地从应用程序中的任何位置自动加载所有 Zend 类(例如 Zend_View)。当然,Zend 还附带了用于视图助手和其他自定义类前缀的类自动加载器,但这超出了问题范围。
由于所有内容都位于文档根目录 (/public) 之外,因此用户可以看到的唯一脚本(以防出现问题并且用户开始看到暴露的 PHP 代码)是对应用程序引导程序和其他初始化行的调用(例如包含路径和和一些常量,但您也可以通过包含另一个外部文件来初始化所有这些...)。
简而言之,是的,将核心类放在文档根目录之外是一个好主意,也是一个好的实践。然后,您所需要做的就是在包含路径列表中添加共享库的路径,如下所示:
set_include_path(implode(PATH_SEPARATOR, array(
LIBRARY_PATH,
get_include_path(),
)));
其中 LIBRARY_PATH 是共享库的相对或绝对路径。
但请注意,添加的路径越多,自动加载类的速度就越慢。最好只包含 3 条或更少的路径。看看 Zend 如何通过他们的解决方案来解决这个问题自动装载机.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)