代码之家  ›  专栏  ›  技术社区  ›  niggles

将核心类置于web根目录之上-好主意还是坏主意?

php
  •  3
  • niggles  · 技术社区  · 14 年前

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

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

    专门的课程会放在相关的web目录中,但是共享库会放在/var/www/shared libraries或类似的目录下。

    除了有可能用一行糟糕的代码同时使所有站点崩溃之外,还有什么原因让我不想走这条路呢?

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Frankie    11 年前

    Zend Framework 使用这种技术,使整个应用程序不至于以纯文本形式输出敏感的PHP代码,因为所有内容都在文档根目录之外,并使用mod\u redirect来知道要分派到哪个模块/控制器/操作。

    基本项目布局类似于

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

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

    简而言之,是的,将核心类放在文档根目录之外是一个好主意,也是一个好实践。那么,您只需在include path列表中添加共享库的路径,如下所示:

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

    其中LIBRARY\u PATH是指向共享库的相对或绝对路径。

    但是,请注意,添加的路径越多,自动加载类的速度就越慢。这是一个很好的做法,只有大约3个路径在那里或更少。看看Zend是如何通过他们的 autoloaders

        2
  •  1
  •   Frankie    14 年前

    这不仅是一个好的技术,但你应该做的每一次你可以!

    你永远不知道什么时候你会遇到一个地狱般的sys管理员,他会禁用PHP并保持Apache文件为全文!;)