程序目录结构

SpeedPHP框架的目录结构比较简单,秉承了SpeedPHP快速学习的理念。

新版的sp框架,由于加入了mudules开发模式,所以在目录结构方面,趋于更精炼,更固定化。

3.1版及之前的sp框架,目录结构是可以通过配置进行修改。

但是新版的情况不一样了。

之所以我们要用固定的目录结构,理由如下:

  • 加入mudules开发模式,使得多个应用可以集成到一个程序里面,也就是传统的模块开发。所以已经不需要因为多应用共享类库而需要改变目录结构。
  • 新的目录结构更安全,但是如果能随意修改结构,那么安全很难保证。
  • 为了配合框架本身更精简的理念,让加载文件变得更少,更快速。
  • “约定优于配置”的敏捷理念,让团队成员可以更容易理解各文件所在位置和意义,更容易上手和交接现有程序。

新的结构加入了protected目录,意为“保护目录”。除了入口文件(index.php)外,其他代码文件(包括模板.html)都应该放在protected目录下,以便统一保护起来,拒绝外部浏览访问,杜绝安全问题。

在3.1版的框架程序的实践中,经常有初学者页面上直接用链接来访问模板目录(tpl/view目录)下的.html文件,这是有安全隐患的。因为在模板目录下的.html,虽然扩展名是html,但实际上已经算是可执行的php程序的一部分。通过浏览器访问时,这些html文件可以被看到到源码——也相当于php代码被公开了。

临时文件目录tmp有时也会有一定的安全隐患,这是一个能被上传文件的目录。如果服务器没有配置该目录禁止执行php程序的权限,或者上传的文件不经过严格的过滤,那么通过浏览器也可以执行这些危险的php程序。

新版的protected目录自带了apache服务器的.htaccess文件,可以保护当前目录的访问。如果您的服务器是nginx,可以在nginx配置内加入

  1. location ^~ /protected {
  2. deny all;
  3. }

.htaccess文件如果不生效,那么可能是apache配置问题。请自行搜索解决。

nginx配置上面的目录,如果是子目录内,请根据实际情况修改。

既定的目录结构

控制器目录,protected/controller

  • 控制器目录下应该全部都是控制器文件,如MainController.php.

  • 控制器目录下可以有下一级子目录,每个子目录代表一个modules模块。

框架目录,protected/lib

主要是框架主文件,speed.php文件。

对比3.1版框架,现在的sp框架已经精简到一个文件内,以便更容易载入并且占用更少资源。

一个文件的框架在APC等opcode编译缓存的环境下,有更良好的速度。

临时文件目录,protected/tmp

保存缓存文件、模板编译文件、程序上传临时文件等的临时文件目录。

模板目录,protected/view

模板页面的存放目录。

该目录也可以有子目录,子目录通过display方法以view目录作为根路径方式载入。

模型类库目录,protected/model

该目录可以存放数据模型类,也可以存放其他第三方类库。

类库目录,protected/include

同model目录,但载入优先级比model目录要低。可以存放不太常用的第三方类库。

默认情况下,include目录需要用户自己创建。