Ours Facebook技术研究报告(3)-程序设计框架
[开篇]
1.关于FaceBook网站及其类似网站开发技术
2.我们选用何种框架
第一章 认识CodeIgniter
1.1.什么是CodeIgniter
1.2.CodeIgniter的一些特性
第二章 CodeIgniter框架的基本构架
2.1. 应用程序流程图
2.2. 模型-视图-控制器
第三章 CodeIgniter核心技术详解
3.1. CodeIgniter URL
3.2. 控制器
3.3. 视图
3.4. 模型
第四章 利用CodeIgniter建立网站基本过程
[开篇]
1.关于FaceBook网站及其类似网站开发技术
FackBook真正实现了WEB2.0的思想,目前模仿他的网站也越来越多,从国内的校内网到各种交友类型的网站,都在潜移默化地继承它的的思想.甚至我们可以说校内网简直是FaceBook的翻版.
FaceBook的程序框架采用PHP+MYSQL.我们知道php构架有很多,比如Mojavi、WACT、PHPMvc和Seagull等等…
我们从FaceBook的页面可以看出,其采用的是Code Igniter框架.
Code Igniter可以说是一匹黑马.Code Igniter出现之时正是Symfony和CakePHP大行其道、Zend Framework万众期待的时刻.可凭借着独特的设计思想,Code Igniter吸引了大批开发者.这点从其火爆的官方论坛就可得到证实.
Code Igniter推崇”简单就是美”这一原则.没有花哨的设计模式、没有华丽的对象结构,一切都是那么简单.几行代码就能开始运行,再加几行代码就可以进行输出.大部分日常开发中用到的东西都可以立即找到,并且可以很容易的使用.Code Igniter可谓是”大道至简”的典范.
但是,Code Igniter本身的实现不太理想.内部结构过于混乱,虽然简单易用,但缺乏扩展能力.因此在发展到1.5系列版本时,作者不得不通过增加各种hooks来为框架提供扩展能力.
2.我们选用何种框架
任何事物都有其优点和缺点,技术当然也如此. 在我们选用用何种技术来实现的时候,我们关键要看他是否适合我们的方案.在比较了php的一些架构之后,我们还是决定采用Code Igniter架构.其实最重要的原因显而易见,绝大部分php网站采用这种架构,包括facebook本身.
我们将选用其最新版本 1.6.1 版本进行开发.
第一章 认识Code Igniter
1.1.什么是CodeIgniter
CodeIgniter 是一个为用 PHP 编写网络应用程序的人员提供的工具包.它的目标是实现让你比从零开始编写代码更快速地开发项目,为此,CI 提供了一套丰富的类库来满足通常的任务需求,并且提供了一个简单的接口和逻辑结构来调用这些库.CodeIgniter 可以将需要完成的任务代码量最小化,这样你就可以把更多的精力放到项目的开发上了.
1.2.CodeIgniter的一些特性
●CodeIgniter 是免费的
CodeIgniter 是经过 Apache/BSD-style 开源许可授权的,只要你愿意就可以使用它.阅读 许可协议 可获得更多的信息.
●CodeIgniter 在 PHP 4 上运行, Kohana是专门为PHP 5开发的
CodeIgniter 的编写完全兼容 PHP 4.
Kohana 是基于 CodeIgniter PHP 框架开发的,专门为php5设计的具有更高特性的开发框架.
●CodeIgniter 是轻量级的
真正的轻量级.核心系统只需要一些非常小的库,这与那些需要更多资源的框架完全相反.额外的库文件只在请求的时候加载,依需求而定,所以核心系统是非常快而且轻的.
●CodeIgniter 是快速的
速度非常快.你要找到一个比 CodeIgniter 表现更优的框架应该很难吧.
●CodeIgniter 使用 M-V-C 模型
CodeIgniter 使用了模型(Model)- 视图(View)- 控制器(Controllers)的方法,这样可以更好地使表现层和逻辑层分离.这对项目的模板设计者来说是非常有用的,它最小化了模板中的程序代码量.我们在 MVC 各自的页面中对此做了更多的介绍.
●CodeIgniter 生成干净的 URLs
CodeIgniter 生成的 URL 非常干净而且是对搜索引擎友好化的.不同于标准的”字符串查询”方法,CodeIgniter使用了 segment-based 这样的方法:
www.your-site.com/news/article/345
注意:index.php 文件是被默认包含在 URL 中的,但是可以通过更改 .htaccess 文件来改变这个设置.
●CodeIgniter 功能强大
CodeIgniter 拥有全范围的类库,可以完成大多数通常需要的网络开发任务,包括: 读取数据库、发送电子邮件、数据确认、保存 session 、对图片的操作,以及支持 XML-RPC 数据传输等.
●CodeIgniter 是可扩展的
这个系统可以非常简单的通过插件和 helper 类库来进行扩展,或者也可以通过扩展类、系统钩子来实现.
●CodeIgniter 不需要模板引擎
虽然 CodeIgniter 确实 自带了一个可选的模板解析器程序,但不要求你必须使用模板.模板引擎完全与本地化PHP代码的性能需求不符,使用模板引擎我们要学习其语法,这最低限度只比学PHP基础要容易一点点.
我们总结一下其全部的主要特性:
■基于 MVC 体系
■兼容 PHP 4
■超轻量级
■对数种数据库平台的全特性支持的数据库类
■Active Record 支持
■表单与数据验证
■安全性与 XSS 过滤
■Session 管理
■邮件发送类,支持附件,HTML 或文本邮件,多协议(sendmail, SMTP 和 Mail)及更多.
■图像处理类库(剪裁,缩放,旋转等).支持 GD,ImageMagick 和 BetPBM
■文件上传类
■FTP 类
■本地化
■分页
■数据加密
■基准测试
■全页面缓存
■错误日志
■应用程序评测
■脚手架(Scaffolding)
■日历类
■User-Agent 类
■Zip 编码类
■模板引擎类
■Trackback 类
■XML-RPC 类库
■单元测试类
■”搜索引擎友好”的 URL
■灵活的 URI 路由
■支持勾子,类扩展及插件
■大量的辅助函数
第二章 CodeIgniter框架的基本构架
2.1 应用程序流程图
下图说明数据流如何贯穿整个系统:
1).index.php 作为前端控制器,初始化运行 CodeIgniter 所需要的基本资源.
2).Router 检查 HTTP 请求,以确定谁来处理请求.
3).如果缓存(Cache)文件存在,它将绕过通常的系统执行顺序,被直接发送给浏览器.
4).安全(Security).应用程序控制器(Application Controller)装载之前,HTTP 请求和任何用户提交的数据将被过滤.
5).控制器(Controller)装载模型、核心库、插件、助手类,以及任何处理特殊请求所需的其它资源.
6).最终视图(View)渲染发送到 Web 浏览器中的内容.如果开启缓存(Caching),视图首先被缓存,所以将可用于以后的请求.
2.2. 模型-视图-控制器
CodeIgniter 是基于模型-视图-控制器这一设计模式的。MVC 是一种将应用程序的逻辑层和表现层进行分离的方法。在实践中,由于表现层从 PHP 脚本中分离了出来,所以它允许你的网页中只包含很少的脚本。
■模型 代表你的数据结构。通常来说,你的模型类将包含取出、插入、更新你的数据库资料这些功能。
■视图 是展示给用户的信息。 一个视图通常是一个网页,但是在 CodeIgniter 中, 一个视图也可以是一个页面片段,如头部、顶部。它还可以是一个 RSS 页面,或其他任一页面。
■控制器 是一个中介,联接视图和模型,以及其他任何处理 HTTP 请求和产生网页的资源。
CodeIgniter 在 MVC 使用上非常宽松,因此模型不是必需的。如果你不需要使用这种分离方式,或是发觉维护模型比你想象中的复杂很多,你可以不用理会它们而创建自己的应用程序,并最少化使用控制器和视图。CodeIgniter 也可以和你现有的脚本合并使用,或者允许自行开发此系统的核心库,其目的是,使你可以以最适合你的方式工作。
第三章 CodeIgniter核心技术详解
3.1. CodeIgniter URL
默认情况下,CodeIgniter 中的 URL 被设计成对搜索引擎和人类友好。不同于使用标准“查询字符串”方法的是,CodeIgniter 使用基于段的方法:
www.your-site.com/news/article/my_article
注意:查询字符串形式的 URL 是可选的,分述如下。
●URI 段
根据模型-视图-控制器模式,在此 URL 段一般以如下形式表示:
www.your-site.com/class/function/ID
第一段表示调用控制器类。
第二段表示调用类中的函数或方法。
第三及更多的段表示的是传递给控制器的参数,如 ID 或其他各种变量。
URI 类和 URL 辅助函数中的函数可以使你的 URI 更简单的工作。另外,使用 URI 路由特性可以将你的 URL 重定向,以获得更大的灵活性。
●删除 index.php 文件
默认情况下,index.php 文件将被包含在你的 URL 中:
www.your-site.com/index.php/news/article/my_article
你可以很容易的通过 .htaccess 文件来设置一些简单的规则删除它。下面是一个例子,使用“negative”方法将非指定内容进行重定向:
RewriteEngine on
RewriteCond $1 !^(index/.php|images|robots/.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
在上面的例子中,可以实现任何非 index.php、images 和 robots.txt 的 HTTP 请求都被指向 index.php。
●添加 URL 后缀
通过设置 config/config.php 文件,你可以为 CodeIgniter 生成的 URL 添加一个指定的文件后缀。举例来说,如果 URL 是这样的:
www.your-site.com/index.php/products/view/shoes
你可以随意添加一个后缀,例如 .html,使其显示为:
www.your-site.com/index.php/products/view/shoes.html
(icebird注:英文中由于参数可直接看懂其含义,并未说明应修改哪个参数,在这里应修改$config['url_suffix']这个参数。)
●启用查询字符串
在一些情况下你需要在 URL 中使用查询字符串:
index.php?c=products&m=view&id=345
CodeIgniter 支持这个功能是可选的,可以在 application/config.php 文件中进行设置。如果你打开 config 文件可以看到如下内容:
$config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c';
$config['function_trigger'] = 'm';
如果你将 enable_query_strings 更改为 TRUE ,那么这个功能就被激活了。此时,你就可以通过关键字来调用需要的控制器和方法了:
index.php?c=controller&m=method
请注意:如果你使用查询字符串,那么就必须使用自己建立的 URL ,而且不能使用URL 辅助函数(或是其他生成 URL 的辅助函数,例如表单辅助函数),因为这些都是根据分段 URL 设计的。
3.2 控制器
控制器是应用程序的心脏,因为它们决定如何处理 HTTP 请求。
●什么是控制器?
简而言之,一个控制器就是一个类文件,是以一种能够和 URI 关联在一起的方式来命名的。
假设这个 URI:
www.your-site.com/index.php/blog/
在上面的例子中,CodeIgniter 将尝试寻找并装载一个名为 blog.php 的控制器。
当控制器的名字匹配 URI 的第一段时,它将被装载。
下面创建一个简单的控制器,以便更直观地了解其工作原理。使用你的文本编辑器,创建一个名为 blog.php 的文件,然后输入下列代码:
class Blog extends Controller {
function index()
{
echo '你好,世界!';
}
}
?>
然后保存文件到 application/controllers/ 文件夹。
现在使用类似这样的 URL 访问你的站点:
www.your-site.com/index.php/blog/
如果你做的没错,你应该看到你好,世界!.
注意:类名必须以大写字母开头。换句话说,这是有效的:
class Blog extends Controller {
}
?>
这是无效的:
class blog extends Controller {
}
?>
同时,始终确保你的控制器扩展自父控制器类,以便它能够继承其所有的方法。
●方法
上面的例子中用到的方法名是 index()。如果 URI 的第二部分为空的话,会默认载入 “index” 方法。也可以将地址写成这样来访问 “Hello World”:
www.your-site.com/index.php/blog/index/
URI 的第二部分是用来决定调用控制器中哪个方法的。
在你的控制器中加入一个新的方法:
class Blog extends Controller {
function index()
{
echo 'Hello World!';
}
function comments()
{
echo 'Look at this!';
}
}
?>
现在在地址栏中输入下面的内容来访问 comment 方法:
www.your-site.com/index.php/blog/comments/
你应该看到新的信息了:Look at this!
●将 URI 片段传递给方法
如果你的 URI 超过两个部分,那么超过的将被作为参数传递给方法。
举例来说,如果你的 URI 是这样的:
www.your-site.com/index.php/products/shoes/sandals/123
URI 的第3和第4部分会被传递给你的方法(“sandals” 和 “ 123” ):
class Products extends Controller {
function shoes($sandals, $id)
{
echo $sandals;
echo $id;
}
}
?>
注意:如果你使用 URI 路由特性,则传递到方法中的 URI 片段将被重新路由一次。
●定义默认控制器
当你的网站没有设置 URI 或者直接从根目录访问的时候,CodeIgniter 会加载默认控制器。打开 application/config/routes.php 文件来设置默认控制器:
$route['default_controller'] = 'Blog';
这里的 Blog 就是你希望使用的控制器的名字。如果此时你不指定任何 URI 片段来访问你的主页就会看到默认的“Hello World”信息。
●重新定义方法的调用规则
如上所述,URI 的第二片段决定会调用控制器中的哪个方法。CodeIgniter 允许你使用 _remap() 方法来废除这种规则:
function _remap()
{
// Some code here...
}
被重新定义的方法调用方式(一般是 URI 中的第二片段)将作为一个参数传递给 _remap() :
function _remap($method)
{
if ($method == 'some_method')
{
$this->$method();
}
else
{
$this->default_method();
}
}
●处理输出
CodeIgniter 拥有一个输出类用来确保你修改的数据会自动被传递给浏览器。关于这个的更多信息可以在视图和输出类里找到。有些时候,你可能想要自己发布修改一些最终的数据或是自己把它传递给浏览器。CodeIgniter 允许你给你的控制器增加一个名为 _output() 的方法来接收最终的数据。
例如:
function _output($output)
{
echo $output;
}
●私有方法
在某些情况下,你可能想要隐藏一些方法使之无法对外查阅。将方法私有化很简单,只要在方法名字前面加一个下划线(“_”)做前缀就无法通过 URL 访问到了。例如,如果你有一个像这样的方法:
function _utility()
{
// some code
}
那么,通过下面这样的 URL 进行访问是无法访问到的:
www.your-site.com/index.php/blog/_utility/
●如何将控制器放入子文件夹中
如果你在建立一个大型的应用程序,你会发现 CodeIgniter 可以很方便的将控制器放到一些子文件夹中。
只要在 application/controllers 目录下创建文件夹并放入你的控制器就可以了。
如果你要使用某个子文件夹下的功能,就要保证 URI 的第一个片段是用于描述这个文件夹的。例如说你有一个控制器在这里:
application/controllers/products/shoes.php
调用这个控制器的时候你的 URI 要这么写:
www.your-site.com/index.php/products/shoes/123
你的每个子文件夹中需要包含一个默认的控制器,这样如果 URI 中只有子文件夹而没有具体功能的时候它将被调用。只要将你作为默认的控制器名称在 application/config/routes.php 文件中指定就可以了。
CodeIgniter 也允许你使用 URI 路由 功能来重新定向 URI。
●构造函数
如果要在你的任意控制器中使用构造函数的话,那么必须在里面加入下面这行代码:
parent::Controller();
这行代码的必要性在于,你此处的构造函数会覆盖掉这个父控制器类中的构造函数,所以我们要手动调用它。
如果你对构造函数不熟悉可以看这里,在 PHP 4 中,一个构造函数就是一个拥有和类名完全相同的名字的简单函数:
class Blog extends Controller {
function Blog()
{
parent::Controller();
}
}
?>
在 PHP 5 中,构造函数的语法是这样的:
class Blog extends Controller {
function __construct()
{
parent::Controller();
}
}
?>
如果你需要设定某些默认的值或是在实例化类的时候运行一个默认的程序,那么构造函数在这方面就非常有用了。
构造函数并不能返回值,但是可以用来设置一些默认的功能。
3.3 视图
简而言之,一个视图就是一个网页,或是网页的部分,如头部,底部,侧边栏等等。事实上,如果你需要这种层次类型,视图可以很灵活的嵌入到其他视图中。
视图从不直接调用,必须被一个控制器来调用。记住,在一个 MVC 框架中,控制器扮演着交通警察的角色,那么,他有责任去取回某一特定的视图。如果你还没有阅读过控制器页面的话,你应该事先阅读控制器页面。
下面使用你在控制器页面已经创建过的示例控制器,让我们来给他添加个视图。
●创建视图
使用你的文本编辑器,创建一个名为 blogview.php 的文件,写入以下代码:
Welcome to my Blog!
然后保存文件到 application/views/ 文件夹。
●载入视图
你必须使用下面的函数来载入一个视图文件:
$this->load->view('name');
上面的 name 便是你的视图文件的名字. 注意: .php 文件的扩展名(后缀名)没有必要专门写出,除非你使用了其他的.
现在, 打开你先前写的名为 blog.php 控制器文件,并且使用视图载入函数替换echo段代码:
class Blog extends Controller {
function index()
{
$this->load->view('blogview');
}
}
?>
如果你使用先前你用的 URL 浏览你的网站,你将会看到你的新视图. URL 与下面的类似:
www.your-site.com/index.php/blog/
●载入多个视图
如下可以载入多个视图:
class Page extends Controller {
function index()
{
$data['page_title'] = 'Your title';
$this->load->view('header');
$this->load->view('menu');
$this->load->view('content', $data);
$this->load->view('footer');
}
}
?>
●用子文件夹存储视图
如果你想让文件更有组织性,你也可以用子文件夹来存储你的视图文件.. 当你在载入视图时,必须加上子文件夹的名字. 示例如下:
$this->load->view('folder_name/file_name');
●给视图添加动态数据
数据通过控制器以一个数组或是对象的形式传入视图 , 这个数组或对象作为视图载入函数的第二个参数 .下面便是使用数组的示例:
$data = array(
'title' => 'My Title',
'heading' => 'My Heading',
'message' => 'My Message'
);
$this->load->view('blogview', $data);
这里是使用对象的示例:
$data = new Someclass();
$this->load->view('blogview', $data);
注意:如果你使用一个对象,那么类变量将转换为数组元素。
好了,让我们用你的控制器试试。打开控制器并添加以下代码:
class Blog extends Controller {
function index()
{
$data['title'] = "My Real Title";
$data['heading'] = "My Real Heading";
$this->load->view('blogview', $data);
}
}
?>
现在,打开你的视图文件,将其中的文本替换成与数组对应的变量:
然后使用你先前用过的URL载入页面,你将看到变量已经被替换。
●创建循环
你传入视图文件的数据,不仅仅局限于简单的变量。你可以传递多维数组。例如:你从数据库里面取出数据就是典型的多维数据。
这里是个简单的示例。添加以下代码到你的控制器:
class Blog extends Controller {
function index()
{
$data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');
$data['title'] = "My Real Title";
$data['heading'] = "My Real Heading";
$this->load->view('blogview', $data);
}
}
?>
现在打开你的视图文件,创建一个循环:
My Todo List
3.4模型
模型对于那些想用传统MVC方式的人来说是可选的。
●什么是模型?
模型是专门用来和数据库打交道的PHP类。例如,假设你想用CodeIgniter来做一个Blog。你可以写一个模型类,里面包含插入、更新、删除Blog数据的方法。下面的例子将向你展示一个普通的模型类:
class Blogmodel extends Model {
var $title = '';
var $content = '';
var $date = '';
function Blogmodel()
{
// Call the Model constructor for PHP4
parent::Model();
}
function get_last_ten_entries()
{
$query = $this->db->get('entries', 10);
return $query->result();
}
function insert_entry()
{
$this->title = $_POST['title'];
$this->content = $_POST['content'];
$this->date = time();
$this->db->insert('entries', $this);
}
function update_entry()
{
$this->title = $_POST['title'];
$this->content = $_POST['content'];
$this->date = time();
$this->db->update('entries', $this, array('id', $_POST['id']));
}
}
●剖析模型
模型类文件存放在 application/models/ 文件夹。 如果你愿意,可以在里面建立子文件夹。
最基本的模型类必须像这样:
class Model_name extends Model {
function Model_name()
{
parent::Model();
}
}
Model_name 是模型类的名字。 类名的首字母必须大写,其他字母小写。并且确保你的类继承了基本模型类(Base Model Class)。
文件名应该是模型类名的小写版。比如,如果你的类是:
class User_model extends Model {
function User_model()
{
parent::Model();
}
}
类的文件名应该是:
class User_model extends Model {
function User_model()
{
parent::Model();
}
}
类的文件名应该是:
application/models/user_model.php
●载入模型
模型可以在 controller 中被引用。就像这样:
$this->load->model('Model_name');
如果模型文件在子文件夹下,引用的时候要带上相对路径名。例如:如果你有一个模型 application/models/blog/queries.php。下面的代码可以引用它:
$this->load->model('blog/queries');
模型一旦被载入,你就能通过下面的方法使用它:
$this->load->model('Model_name');
$this->Model_name->function();
如果你想给你的model指派一个不同的对象名,可以在加载模型函数中指定第二个参数:
$this->load->model('Model_name', 'fubar');
$this->fubar->function();
这里有个控制器的例子,加载一个模型,然后通过视图显示出来
class Blog_controller extends Controller {
function blog()
{
$this->load->model('Blog');
$data['query'] = $this->Blog->get_last_ten_entries();
$this->load->view('blog', $data);
}
}
●自动载入模型
如果您需要一个在整个项目中都起作用的特定模型,您可以让 CodeIgniter 在初始化时自动装载它。实现的方法是打开 application/config/autoload.php 文件,然后在自动装载数组中添加上这个模型。
●连接到数据库
当一个模型被载入时,它并不会自动连接数据库。以下方法可以使您连接数据库:
■您可以使用标准方法来连接数据库(说明), 也可以通过控制器或者您的自定义模型。
■您可以把第三个参数设置为TRUE来使模型装载函数自动连接数据库,连接配置可以在您的数据库配置文件中可以定义:
$this->load->model('Model_name', '', TRUE);
■您可以手动设定第三个参数来载入您的自定义数据库配置:
$config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = "mydatabase";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$this->load->model('Model_name', '', $config);
第四章 利用CodeIgniter建立网站基本过程
利用用CI建立一个网站很容易,让我们看看有哪些基本的步骤.
1.软件准备
一个PHP 4.3.1 +和Mysql4+组成的软件服务器.我们的开发采用LAMP,在前面的报告中已经介绍了配置,我们就利用此配置.
2. 下载最新版的框架.目前最新版本是 1.6.1 .
3. 解压缩这个文件,把它释放到网站根目录中。
4.其组成目录是
分析文件结构
安装 CI 文件后,我们来看一下目录结构。
|
—-htdocs
|
--system
| |
| --application
| | |
| | --config
| | |
| | --controllers
| | |
| | --errors
| | |
| | --hooks
| | |
| | --libraries
| | |
| | --models
| | |
| | --views
| --cache
| |
| --codeigniter
| |
| +-database
| |
| --fonts
| |
| --helpers
| |
| +-language
| |
| --libraires
| |
| --logs
| |
| --plugins
| |
| +-scaffolding
| |
+-user_guide
这些文件夹分为三个小组:
■ application是你自己的项目存放文件的目录 (举例来说, 控制器、模型和视野: 全部在应用文件夹中). 除了你才见到的默认的视图和控制器,这些文件夹是空的。
■在系统文件夹的一部分文件夹是 CI 本身的代码。(system/libraries、system/codeigniter 、system/drivers, 等等。). 如果你愿意,你能研读他们, 或者改变他们-不过要等到你了解 CI 是如何工作才这样做。而且如果你改变框架内的代码,记住当你下载 CodeIgniter更新版本的时候,备份它们。否则新的版本会覆盖它们。当然,你也可能不需要自己修改代码而直接使用CI本身的代码,Rick写的代码应该是很不错的。
■ 还有一些文件夹中已包含文件,但是可能需要增加或修改(如:language、 config, errors.) 这些文件夹被设定成默认值,但是你可以修改它们。
5.config 文件夹包含了为你的网站设定基本结构的一些文件。 打开 config/config.php 文件.告诉网站应该在哪里找到它自己的结构和配置信息. 文件的第一行一般是这样的(不包含注释): PHP 代码:
/*
|------------------------------------------------
| Base Site URL
|------------------------------------------------
|
| URL to your codeIgniter root. Typically this
| will be your base URL, WITH a trailing slash:
|
| [url]http://www.your-site.com/[/url]
|
*/
$config['base_url']=" [url]http://127.0.0.1/[/url]";
/*
6.验证网站能否正常工作.
一个简单方法就是打开你的浏览器。假定你正在本地服务器的根文件夹中运行它, 在地址栏输入http://127.0.0.1 ,你能看到网站的默认页面.
如果正常,说明我们已经配置完成并能在上面进行开发.如果不成功,那么必须检查你的WEB服务器的配置环境了.