用户
 找回密码
 入住 CI 中国社区
搜索
查看: 31518|回复: 31
收起左侧

CodeIgniter项目初始化之目录结构

  [复制链接]
发表于 2013-12-6 14:00:46 | 显示全部楼层 |阅读模式
本帖最后由 Bobby 于 2013-12-6 21:55 编辑

通过半年来对CodeIgniter框架的学习以及针对项目碰到的一些问题,产生了一点点心得,于是决定总结下这段时间对CodeIgniter的认识,先从目录结构说起吧。
CodeIgniter框架已帮我们配置好了项目目录结构,来看看Codeigniter的目录结构:


  index.php: CodeIgniter单一入口文件。
     system: 框架目录,Codeigniter核心文件和自带的类库、函数等。
application: 应用目录,包括控制器、模型、配置、类库等等,所有的PHP代码都写在该目录中。
CI提供的默认结构可能是最方便、快速的,但不一定是最好的,可以看到入口文件和application、system目录处于同一级别,这意味着web目录也可以访问到application、system中的内容。虽然CI对每个目录做了.htaccess限制,但依然存在潜在的危险。可能由于服务器配置的不完善导致某些目录可以被访问到。并且随着开发的不断进行,我们可能会在每一个目录中放一些文件,即便根目录,当这些不该被访问到的文件成为可能时,潜在的危险就存在了。
那如何调整?
其实很简单,可以把静态资源和入口文件放在一起,application和system放置在web目录之外,参考下图:



调整之后所有需要外部可访问的图片、样式、脚本等就都放在public目录下即可。那Codeigniter为什么还这么放呢?目录的调整需要有相关的权限才行,如果服务器没调整的权限,那就不行了。CI本身也提倡把应用和框架放在根目录之外。
所以,不该让用户访问到的文件坚决不让用户存在访问的可能性。
最后回头看看自己的项目,日志文件是否乱放而且在可访问的目录下,不该访问到的缓存、模版文件是否都可以访问到,一些备份的文件是否也直接在根目录下?
发表于 2013-12-20 12:05:43 | 显示全部楼层
gflhx 发表于 2013-12-20 11:12
那进行访问的时候,该怎么访问呢?http://localhost/项目名/public/index.php 这样吗?
...

你理解的不对,这里的意思是把 public 当作 Web 根目录,也就是让 apache 或 nginx 的 www 目录指到 public 目录上,访问起来就是 http://domain/index.php

发表于 2015-12-10 16:11:01 | 显示全部楼层
顺着这个思路再提一个问题.  如果application下有前台和后台的目录, 他们有些model是可以复用的, 这个目录结构怎么设计好.
/application
/application/foreground
/application/foreground/models
...
/application/background
/application/background/models
...

前台后台能共用的部分怎么设计好
发表于 2016-1-8 15:55:39 | 显示全部楼层
shilinn 发表于 2015-12-10 16:11
顺着这个思路再提一个问题.  如果application下有前台和后台的目录, 他们有些model是可以复用的, 这个目录 ...

同问,这个怎么没人回答啊。你解决了没有?
发表于 2013-12-19 21:19:29 | 显示全部楼层
谢谢楼主分享经验,初学者,学到很多~继续学习中!
发表于 2013-12-20 10:55:47 | 显示全部楼层
你这样改了index.php文件的位置,还得该配置吧?
 楼主| 发表于 2013-12-20 11:06:09 | 显示全部楼层
gflhx 发表于 2013-12-20 10:55
你这样改了index.php文件的位置,还得该配置吧?

修改index.php中的两个路径配置变量就可以了。

PHP复制代码
 
$system_path = '../system';
 
$application_folder = '../application';
 
复制代码

发表于 2013-12-20 11:12:05 | 显示全部楼层
Bobby 发表于 2013-12-20 11:06
修改index.php中的两个路径配置变量就可以了。

那进行访问的时候,该怎么访问呢?http://localhost/项目名/public/index.php 这样吗?
发表于 2013-12-20 14:00:18 | 显示全部楼层
Hex 发表于 2013-12-20 12:05
你理解的不对,这里的意思是把 public 当作 Web 根目录,也就是让 apache 或 nginx 的 www 目录指到 publ ...

hex大神,能不能详细的说明一下啊?小弟还是有点不懂啊
发表于 2013-12-20 14:27:28 | 显示全部楼层
gflhx 发表于 2013-12-20 14:00
hex大神,能不能详细的说明一下啊?小弟还是有点不懂啊

我说的已经很详细了,你哪里不懂?如果不知道什么是 Web 根目录,建议去看一下 Apache 手册。

简单说你的网站就是以 public 目录作为根目录,这个你明白吗?这个是通过配置Apache实现的,这个和 PHP 没关系。

发表于 2013-12-20 14:44:37 | 显示全部楼层
Hex 发表于 2013-12-20 14:27
我说的已经很详细了,你哪里不懂?如果不知道什么是 Web 根目录,建议去看一下 Apache 手册。

简单说你 ...

在apache 里DocumentRoot "C:/wamp/www"修改成DocumentRoot "C:/wamp/www/public"这样吗?
发表于 2013-12-20 14:52:51 | 显示全部楼层
gflhx 发表于 2013-12-20 14:44
在apache 里DocumentRoot "C:/wamp/www"修改成DocumentRoot "C:/wamp/www/public"这样吗?

是的,你太聪明了,哈哈~

本版积分规则