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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值