Bobby 发表于 2013-12-6 14:00:46

CodeIgniter项目初始化之目录结构

本帖最后由 Bobby 于 2013-12-6 21:55 编辑

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

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

调整之后所有需要外部可访问的图片、样式、脚本等就都放在public目录下即可。那Codeigniter为什么还这么放呢?目录的调整需要有相关的权限才行,如果服务器没调整的权限,那就不行了。CI本身也提倡把应用和框架放在根目录之外。所以,不该让用户访问到的文件坚决不让用户存在访问的可能性。最后回头看看自己的项目,日志文件是否乱放而且在可访问的目录下,不该访问到的缓存、模版文件是否都可以访问到,一些备份的文件是否也直接在根目录下?

Hex 发表于 2013-12-20 12:05:43

gflhx 发表于 2013-12-20 11:12 static/image/common/back.gif
那进行访问的时候,该怎么访问呢?http://localhost/项目名/public/index.php 这样吗?
...

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

shilinn 发表于 2015-12-10 16:11:01

顺着这个思路再提一个问题.如果application下有前台和后台的目录, 他们有些model是可以复用的, 这个目录结构怎么设计好.
/application
/application/foreground
/application/foreground/models
...
/application/background
/application/background/models
...

前台后台能共用的部分怎么设计好

codein 发表于 2016-1-8 15:55:39

shilinn 发表于 2015-12-10 16:11
顺着这个思路再提一个问题.如果application下有前台和后台的目录, 他们有些model是可以复用的, 这个目录 ...

同问,这个怎么没人回答啊。你解决了没有?

马也 发表于 2013-12-19 21:19:29

谢谢楼主分享经验,初学者,学到很多~继续学习中!

gflhx 发表于 2013-12-20 10:55:47

你这样改了index.php文件的位置,还得该配置吧?

Bobby 发表于 2013-12-20 11:06:09

gflhx 发表于 2013-12-20 10:55 static/image/common/back.gif
你这样改了index.php文件的位置,还得该配置吧?

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


$system_path = '../system';

$application_folder = '../application';

gflhx 发表于 2013-12-20 11:12:05

Bobby 发表于 2013-12-20 11:06 static/image/common/back.gif
修改index.php中的两个路径配置变量就可以了。

那进行访问的时候,该怎么访问呢?http://localhost/项目名/public/index.php 这样吗?

gflhx 发表于 2013-12-20 14:00:18

Hex 发表于 2013-12-20 12:05 static/image/common/back.gif
你理解的不对,这里的意思是把 public 当作 Web 根目录,也就是让 apache 或 nginx 的 www 目录指到 publ ...

hex大神,能不能详细的说明一下啊?小弟还是有点不懂啊

Hex 发表于 2013-12-20 14:27:28

gflhx 发表于 2013-12-20 14:00 static/image/common/back.gif
hex大神,能不能详细的说明一下啊?小弟还是有点不懂啊

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

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

gflhx 发表于 2013-12-20 14:44:37

Hex 发表于 2013-12-20 14:27 static/image/common/back.gif
我说的已经很详细了,你哪里不懂?如果不知道什么是 Web 根目录,建议去看一下 Apache 手册。

简单说你 ...

在apache 里DocumentRoot "C:/wamp/www"修改成DocumentRoot "C:/wamp/www/public"这样吗?

Hex 发表于 2013-12-20 14:52:51

gflhx 发表于 2013-12-20 14:44 static/image/common/back.gif
在apache 里DocumentRoot "C:/wamp/www"修改成DocumentRoot "C:/wamp/www/public"这样吗?

是的,你太聪明了,哈哈~
页: [1] 2 3 4
查看完整版本: CodeIgniter项目初始化之目录结构