设为首页 收藏本站
查看: 547|回复: 0

[经验分享] PHP应用目录结构设计

[复制链接]

尚未签到

发表于 2015-8-29 07:29:43 | 显示全部楼层 |阅读模式
  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        这种布局尤其适合于models、views和controllers相互关联的情况;
  l       缺点
  n        不熟悉Unix/Linux的人会对这种命名风格感觉神秘;
  n        对于多个models、views和controllers的组合,如果他们互不相关,比如与博客相关的代码和与投票相关的代码,把他们按组分别放置于一个目录就不太合适。
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风格的简短命名如:lib、usr和var,用其全称表示,对不熟悉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        除了用户写的类库代码,应用相关的代码(比如用于同一个域的model、controllers和views)位于一个特定目录;
  n        类库在系统中是全局安装的(就像PEAR一样);
  n        古典型结构把相关的代码集中放置于一个顶层目录,而常规型结构与此恰恰相反,他创建了多个顶层目录:
  u      Application:放置与应用直接相关的代码;
  u      Library:放置类库,这些代码实现某些一定的通用功能,而并不与应用密切相关;
  u      Tmp:或者variable目录,是应用程序使用文件系统并生成一些临时文件的地方,比如存放session文件、cache文件或者视图的临时编译文件等;
  n        如果条件允许,这也是Zend Framework推荐使用的目录结构:
  u      使用最通用或推荐的目录结构,将显著提高开发效率。
  l       缺点
  n        顶层目录结构较多。
  n        改造成嵌入结构比较困难(例如把顶层目录都移入到网站可读的htdocs目录中),因为每个具体目录都有设置其安全性。
  n        某些应用可能需要自定义类库或扩展类库,这种情况下,不容易区分用户自定义类库和第三方类库。
2.5 常规模块型结构
  对于这种结构,用于某一特定模块的models、views和controllers会打包放在一个目录下。

  /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
  www、public_html或inetpub
  images
  img
  scripts
  js或者javascrīpt
  styles
  css

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-105673-1-1.html 上篇帖子: 用php操作二进制文件(有二进制操作经验的人进来给偶解答一下下吧,谢谢丫) 下篇帖子: Zend Framework的PHP编码规范【1】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表