zoukankan      html  css  js  c++  java
  • PHP应用目录结构设计

    1 概述... 15

    2 目录结构类型... 15

    2.1 古典型 (Unix/Linux) 15

    2.2 古典扩展型... 17

    2.3 古典扩展嵌入型... 18

    2.4 常规型结构... 19

    2.5 常规模块型结构... 21

    3 命名约定... 22

    本文归纳和阐述了动态网站应用中常用的集中文件组织结构,通过对每种结构的优点和缺点进行介绍,帮助开发者在开始一个新项目前有一个好的开始。本文归纳的几种层级结构是在集合众多意见和建议基础之上得到的,同时通过给每个结构命名,也便于开发者比较他们的优劣。

    1 概述

    以下目录结构的定义是从各种网站应用中总结出来的,并按一定顺序排列。

    l        古典型结构(Unix/Linux)

    l        古典扩展型结构

    l        古典扩展嵌入型结构

    l        常规型结构

    l        常规模块型结构

    另外,本文列出的目录名,比如“/var”、“/tmp”、“/temporary”等,都假定有唯一的前缀,以避免一些安全问题。例如,目录“/tmp”可能实际表示目录“/my/permission/protected/tmp”,而不是大多数UNIX系统中共享的“/tmp”目录。像其他顶级目录一样,类似“/application”这样的目录也有一个跟开发环境有关的前缀,比如/home/me/myZFApp/application

    2 目录结构类型

    2.1 古典型 (Unix/Linux)

    顶层划分为2个目录,分别用来保存网站可读文件(比如图片、javascript脚本或css文件)和应用程序文件,这种风格模拟了Unix/Linux操作系统的目录结构,比较符合Unix/Linux风格爱好者的口味。

    /application
        /etc
        /lib
            /Zend
            /(other libraries)
        /usr
            /controllers
            /models
            /views
        /var
            /sessions
            /cache
            /view_compiles
    /htdocs
        /images
        /scrīpts
        /styles

    l       优点 

    n        独立的、与应用相关的文件放置于一个地方,与网站可读文件分开,安全性较高;

    n        类库文件存放于本地,而不是服务器端;

    n        这种布局尤其适合于modelsviewscontrollers相互关联的情况;

    l       缺点

    n        不熟悉Unix/Linux的人会对这种命名风格感觉神秘;

    n        对于多个modelsviewscontrollers的组合,如果他们互不相关,比如与博客相关的代码和与投票相关的代码,把他们按组分别放置于一个目录就不太合适。

    2.2 古典扩展型

    /application

        /config

        /library

            /Zend

            /(other libraries)

        /user

            /controller

            /model

            /view

        /variable

            /sessions

            /cache

            /view_compiles

    /htdocs

        /images

        /scrīpts

        /styles

        index.php

    l       优点

    n        同古典型结构的优点;

    n        把Unix/Linux风格的简短命名如:libusrvar,用其全称表示,对不熟悉Unix/Linux风格的人会更清晰;

    l       缺点

    n        同古典型结构的缺点,除了命名风格这一条。

    2.3 古典扩展嵌入型

    在某些情况下,把应用相关的文件放置在网站可读目录之外会比较困难,比如你使用的是一个租用的虚拟主机。对于这种情况,位于网站可读目录下的应用文件,应尽可能通过.htaccess文件或其他保护机制保护。

    安全提示:把应用相关文件放置在网站可读目录,会带来些潜在的安全威胁,比如网站敏感信息被暴露,或服务器被暴露给黑客攻击者。

    /htdocs

        /application

            /config

            /library

                /Zend

                /(other libraries)

            /user

                /controller

                /model

                /view

            /variable

                /sessions

                /cache

                /view_compiles

            .htaccess (deny from all)

        /images

        /scrīpts

        /styles

        index.php

    l       优点

    n        如果开发者只能访问到如htdoc这样的网站可能目录,这种结构就比较适用;

    l       缺点

    n        如果没有精心配置,这种结构可能会带来安全问题;

    n        不能使用到/application/的映射,因为他实际存在与文件系统中。

    2.4 常规型结构

    /application

        /config

        /controllers

        /models

        /views

    /htdocs

        /images

        /scrīpts

        /styles

        index.php

    /library

        /Zend

        /(other libraries)

    /tmp

        /sessions

        /cache

        /view_compiles

    l       优点

    n        除了用户写的类库代码,应用相关的代码(比如用于同一个域的modelcontrollersviews)位于一个特定目录;

    n        类库在系统中是全局安装的(就像PEAR一样);

    n        古典型结构把相关的代码集中放置于一个顶层目录,而常规型结构与此恰恰相反,他创建了多个顶层目录:

    u      Application:放置与应用直接相关的代码;

    u      Library:放置类库,这些代码实现某些一定的通用功能,而并不与应用密切相关;

    u      Tmp:或者variable目录,是应用程序使用文件系统并生成一些临时文件的地方,比如存放session文件、cache文件或者视图的临时编译文件等;

    n        如果条件允许,这也是Zend Framework推荐使用的目录结构:

    u      使用最通用或推荐的目录结构,将显著提高开发效率。

    l       缺点

    n        顶层目录结构较多。

    n        改造成嵌入结构比较困难(例如把顶层目录都移入到网站可读的htdocs目录中),因为每个具体目录都有设置其安全性。

    n        某些应用可能需要自定义类库或扩展类库,这种情况下,不容易区分用户自定义类库和第三方类库。

    2.5 常规模块型结构

    对于这种结构,用于某一特定模块的modelsviewscontrollers会打包放在一个目录下。

    /application

        /config (optional)

        /(module 1)

            /config (optional as needed)

            /controllers

            /models

            /views

        /(module 2)

            /controllers

            /models

            /views

        /(module n)

            /controllers

            /models

            /views

    /htdocs

        /images

        /scrīpts

        /styles

        index.php

    /library

        /Zend

        /(other libraries)

    /tmp

        /sessions

        /cache

        /view_compiles

    l       优点

    n        同常规型结构

    n        可以对不相关的应用模块分别打包,比如一个拥有博客、投票系统、交易系统的web网站。

    l       缺点

    n        同常规型结构

    3 命名约定

    名字

    可替代名字

    htdocs

    wwwpublic_htmlinetpub

    images

    img

    scripts

    js或者javascrīpt

    styles

    css

  • 相关阅读:
    caffe常用层: batchNorm层和scale层
    简述configure、pkg-config、pkg_config_path三者的关系
    python删除list中元素的三种方法
    Leetcode 872. Leaf-Similar Trees
    Leetcode 508. Most Frequent Subtree Sum
    Leetcode 572. Subtree of Another Tree
    Leetcode 894. All Possible Full Binary Trees
    Leetcode 814. Binary Tree Pruning
    Leetcode 557. Reverse Words in a String III
    python 多维list声明时的小问题
  • 原文地址:https://www.cnblogs.com/zcy_soft/p/2022286.html
Copyright © 2011-2022 走看看