使用 CodeIgniter 框架快速开发 PHP 应用(一)

原文:使用 CodeIgniter 框架快速开发 PHP 应用(一)
对 CodeIgniter 的介绍

大多数PHPer都想写出运行状态良好的应用程序,而且希望尽可能做得简单且不费事。这篇文章是有关 CodeIgniter的(以后简称CI),CI是一个达成上面目的的所谓框架。

如果你只是要达成一个最终的结果,而把中间所有的编码细节和复杂统统丢给一个框架,CI是你最好的朋友。

CI有很多优点:免费, 轻量级, 容易安装, 它能使你的编程生涯变得很轻松。 这一章我们会告诉你:

. CI 能为你做什么?

. 什么是“框架” ?CI 为什么能被称为框架?

. “开源”商业模式

. CI的某些不足(是的, 它不完美)

CodeIgniter 能为你做什么?

如果你已经是一位PHPer, 开发过PHP应用, CodeIgniter 将会帮助你做得更好, 更容易达成目标。 CI会减少你的代码数量。你的脚本可读性也会更好,更容易升级。它会使你的网站结构更紧凑,代码更强健, 如果不是很好地研究CI的源代码的话,你可能还无法察觉到它的强健。

对大多数兄弟来讲,你可能已经花了不少时间, 系统地学习了PHP、HTML和CSS,当然还有MySQL什么的。不过如果使用CI,你只需要一些基本的LAMP(WAMP)知识, 你没有必要先成为一个专家才能使用CI。 你完全可以先借助于CI或别的什么框架软件,成为一个有生产力的PHP程序员,拿着高薪然后优雅地进一步学习PHP的中高级知识,直至成为一位真正的PHP骨灰级人物。

下述情形,你最好不要使用CI:

. 你没有一点PHP和HTML的基本知识.

. 四五个页面的小程序.

. 只用极少的代码就要完成一个CMS或FORUM程序(CI做不到,神仙也做不到)

节约时间

CI学习周期短,见效快。 让我们试着评估一下相关的要素:

CI如何减少代码数量?

你真的可以减少很多工作量:敲击键盘的次数减少了, 代码错误减少了, 你只需要较少的时间调试代码。 代码量减少还意味着你只需要较少的空间来存放应用程序。

举二个例子(稍后它们会被进一步分析, 因此不用担心如何了解它们的工作原理!)

想像你正在写一个MySQL数据库查询。 可能的代码如下:

PHP

   $connection = mysql_connect("localhost","fred","12345");
   mysql_select_db("websites", $connection);
   $result = mysql_query("SELECT * FROM sites", $connection);
   while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
      foreach ($row as $attribute) {
         print "{$attribute[1]} ";
      }
   }

复制代码

现在看看CI如何处理同一个问题:

PHP

$this->load->database('websites');
$query = $this->db->get('sites');
foreach ($query->result() as $row) {
    print $row->url;
}

复制代码

比较字符数: 前者336,后者112。

第二个例子,现在让我们想像你正在用HTML写一个数据输入窗口, 你想要一个下拉输入框。下拉框中有三个选项。代码如下:

HTML

<select name="type">
<option value="1">www.this.com</option>
<option value="2">www.that.com</option>
<option value="3" selected>www.theother.com</option>
</select>

复制代码

CI的写法和前例一样,因为它把相关内容放入一个数组,更容易由PHP进行处理::

PHP

$urlarray = array(
                  '1'  => 'www.this.com',
          '2'  => 'www.that.com',
          '3'  => 'www.theother.com'
                  );
 
$variable .= form_dropdown('url', $urlarray, '1');

复制代码

在 HTML ,你需要键入 167; 在 CI, 148.

使你的网站更安全

你不需要写很多代码, 是因为CI提供了许多标准的功能, 这些经过仔细推敲的框架内的代码, 对安全性和输入进行了有效的校验和考虑。初学者往往没有足够的能力全面兼顾功能和安全(这也是中高级程序中央委员新手之间能力差异的一个方面)

确保你的链接自动更新

设想你正在写一个菜单页, 有许多超链接可重定向到其他页。 他们全部以传统的HTML格式编写:

<a href="http://www.mysite.com/index.php/start/hello/fred">Hello World</a>

然后, 你决定改变这个链接地址。这意谓你必须仔细地去查找并修改代码中的每一处地址, 否则它们将无法正常工作。

CI 给你一个简单的函数,可以这样写超链接:

echo anchor(start/hello/fred, Say hello to Fred);

CI推荐你把你的URL放入一个config文件供你的脚本读取。CI的anchor函数会自动从config文件中提取相关URL。因此, 当你修改一个URL时,你只需要修改config文件中的的对应链接,就一次那么简单。

防止对数据库的攻击: 对录入数据进行校验和处理

数据输入可能引发许多问题。 因为 HTML 和数据库的限制,数据中总包含特定的符号- 举例来说, 省略符号和引号-可能导致你的数据库遭到攻击,最终得到你无法预料的结果。

解决方案是在把这些数据存入数据库前对这些数据进行相关处理。 这样做会浪费一些系统时间, 增加一些额外编码。

CI的页面助手会自动地完成这些工作。 因此, 当你编写一个录入框时:

echo form_input('username','johndoe');

CI也隐式地执行下列校验函数:

PHP

function form_prep($str='') {
{
   if ($str==='') {
       return '';
   }
   $temp ='__ TEMP_AMPERSANDS__';
      
   // 将录入内容放入临时变量进行处理以便
   // htmlspecialchars不破坏原数据
   $str= preg_replace("/(d+);/", "$temp\1;",$str);
   $str= preg_replace("/&(w+);/", "$temp\1;",$str);
 
   $str= htmlspecialchars($str);
   // htmlspecialchars函数会造成对一些符号的错误处理
   $str= str_replace(array("'",'"'),array("'", "& quot;"), $str);
      
   // 把临时变量还原到输入变量中
   $str= preg_replace("/$temp (d+);/","\1;",$str);
   $str= preg_replace("/$temp (w+);/","&\1;",$str);
      
   return $str;
}

复制代码

上述函数捕获象'&'这样的特殊字符, 以便在你的页面提交时不会造成混乱。你应该知道,有些字符会引起问题。

并不是所有的用户都会中规中矩地录入符合要求的信息,你也不可能知道使用浏览器录入信息的是什么人,他们在想什么,做什么。你可以使用CI来防上下系统录入不符合要求的信息。自然,你大可不必知道CI是如何在幕后为你做到这一切的,你只需要简单地输入如下代码:

  echo form_input('username', 'johndoe');

CI使你写代码更容易了。不象有些类库如PEAR等,集成比较困难,(有时候你会找不到支持PEAR的空间),CI很容易集成,只要把它放入一个目录,它就能很好地工作。CI所有的代码可读性好,也很强健,推出前经过社区用户的认真测试,所以在你可以使用时这些代码已经历了很多考验。

让我们看二个例子。

发送电子邮件非常简单

传统的发送电子邮件功能实现起来比较复杂。CI提供的功能使这件事变得很简单:

PHP

$this->load->library('email');
$this->email->from('your@your-site.com', 'Your Name');
$this->email->subject('Email Text');
$this->email->message('Testing the eamil class.');
$this->email->send();

复制代码

实现发送电子邮件功能中有一些不容易解决的技术问题: 比如文本封装和发送附件功能,标准的PHP实现起来比较复杂,CI简化了这些工作, 它的email类使得发送附件很简单:

  $this->email->attach('/path/to/photo1.jpg');

CI把内部的复杂部分悄悄地完成了, 举例来说,实现了列举近百种不同的附件的MIME类型的功能。所以它知道你的相片photo1.jpg是一个‘image/jpeg'的MIME类型。因此它在在你附件的适当位置填写必要的限制符号,它细致地封装你的文本,使你方便地设置需要标记的文本。

压缩用户需要下载的文件以加快下载速度

为了加快下载速度, 常见的做法是在下载之前压缩下载文件。你可能不知道如何处理。但CI可以方便地让你用四行代码完成此功能:

PHP

$name = 'mydata1.txt';
$data = 'the contents of my file......';
$this->zip->add_data($name, $data);
$this->zip->archive('c:/my_backup.zip');

复制代码

执行这些代码,你会在你的C盘根目录下找到一个压缩文件,解压后即为原始文件。

你网站的用户并不清楚你是如何容易地实现下载压缩文件的功能,他们能体会到你的网站下载速度很快,而你只用了数分种(而不是数小时)就实现了这个功能。

什么是框架,什么是CI?

三百六十行中新增编程这一行不久,人们注意到它牵涉了许多可重复的工作。你或者其它人也许不久以后就要用到几乎同样的功能,但是你必须花很长的时间来修改它。于是,人们就发明了使用函数库的方法来重用代码。使用PHP的兄弟们也会使用函数库,并按用途分类保存到不同的文件中,在编程时用require或include来使用它们。

同样的,框架是为重用而发明的,放在和你的代码分开的目录中,用来减少重复的劳动。

上面例子中连接数据库和写HTML页面的编程工作都可以调用相关的CI函数来进行简化。

有很多种方法实现同样的功能,大多数的框架会让你按照它实现的方法来做,一般来说,框架的作者很有经验,并且作了精心的设计,你可以在几乎所有的场合下使用。

好的框架设计能实现需要的功能, 而且尽可能地不互相牵连。 一个好框架为你做出各种功能的实现,并且给你提供一步一步的编程指导。

提到框架时,就不能不提到有名的框架:Ruby on Rails。

Rails做得相当成功, 因为它藉由最小量的编码, 明显地提供简便快捷的网站开发。 本质上,它是一个结构和一组工具,专为使用Ruby语言的用户开发,允许你快速建立Ruby系统原型。 它不是Ruby语言中唯一的框架,但是它一定是最有开发效率和最有名的。

为PHP开发的框架有好多个,CI只是其中的一个。 其它的还包括Zend Framework、Cake、 Trax 和其他。 下列网址可以找到一个针对十来种框架的简明的图表分析:

http://www.phpit.net/article/ten-different-php-frameworks/。

如果你访问上述网址中相关产品的官方网站, 你将会注意到,每个论坛都有一个共同的热点,就是到底哪个一个框架是最好的? 事实似乎是每个都有它的长处,而且又都有自己的弱点。 我的评估标准是: 我很忙; 因此框架应该节约我的时间,从中选择一个后,就坚持使用下去,因此就有了这篇介绍CI框架的文章。

关于开发者

Rick Ellis开发了CI,他曾经是一个摇滚音乐家,现在是一个软件设计师。 Rick还是pMachine公司的CEO,该公司还有一个著名的CMS产品叫做Expression Engine. 2006年1月,他在他的博客中写道:
(http://ellislab.com)

"我花了数星期时间搜索和安装PHP框架, 也被它们中的许多打击了一把,令我惊讶的是:我发现大多数框架存在以下问题:

. 文档不全或质量很差

. 他们假定你水平很高,希望你能很容易地掌握使用方法

. 他们是为那些有超级用户权限或者有权修改服务器设置的人写的

. 他们假定你偏爱命令行操作,事实上许多人无此爱好

. 偏爱使用PEAR类库或其它开源代码库

. 模板语法过于复杂

. 有的太笨重,有的又太简单

. 大多数框架只能在PHP5中运行,只有5%的使用率

我还没有找到一个简单的PHP框架, 健壮,易于使用, 文档完整,包含建立一个完整应用需要的所有工具彻底地从顶端被证明到根据,生来地包括不可或缺的建立强健的申请的所有的工具, 并且有一个以浏览器为基础的接口, 使用普通用户权限就能安装。没有别的原因,就是市场需要这一单一的原因促使我想开发这样一个框架产品..."

结果是CI诞生了, 作为一个业余时间开发的作品,Rick慷慨地决定使它成为开源作品。在跑生意间隙,他保持经常更新CI。 他也创建了一个优秀的论坛, CI使用者能提出问题而且分享开发心得。 所有这些资源可从下列网址获得:
   http://www.codeigniter.com/
   
他能实现自己的设计目标吗?相信你使用后会得出自己的结论.

CI不能做什么

CI有它本身的缺点。Rick把CI定义为小的和'轻量级'的结构。(1.5版压缩后只有737KB可以在几秒种内下载完毕。Zend Framework是10MB) CI不能解决你所有的问题。 但是它能够:

. 使PHP编程更容易

. 帮助你架构网站或使你更容易地设计架构

作为 '轻量级' 框架的一个结果是它没有它的对手具有的许多特征。 象Rails因为它包含 '脚手架'功能和"代码生成器",因此可以为你编写一些基本的脚本代码。 因此, 举例来说,一经你已经建立一个数据库, Rails能自动生成简单的CRUD脚本(Create, Read, Update, Delete)。

除此之外,Rails还能让你编写'代码生成器'-自动地写其他的简单脚本代码。Rails社区中有许多这样的例子,因此你可以做很多智能化的东西。

CI不这样做。(有基本的 '脚手架'功能-在CI中,脚手架只给开发者使用。就象在线手册描述的一样: "脚手架安全性不够...如要使用脚手架的话要确保在使用后立即关闭这个功能。在实际运行的网站上不要让脚手架处在工作状态。" 说得够明确了吧?)

相反地CI专注于使基本的东西更容易。它处理的一些事物是:

. session管理和cookie管理 (见第 6 章)

. 数据库访问和查询 (见第 4 章)

. 创建HTML相关内容,如页面和表单,并检验输入内容。(见第 5 章)

. 测试 (第 8 章)

. 英特网通信, 使用FTP或 XMLRPC(第 9 章)

很熟悉吧? 这些全部是基本的处理, 如果你正在创建一个动态的网站,你一定会做这些工作。 CI使这些工作更容易, 而且使你的代码尽可能更好地工作。

许可证

参见CI下载文件包

摘要

如果你已经掌握PHP的基本知识并且想“聪明”地编写动态网站脚本, CodeIgniter框架会使你的工作更容易,它帮助你:

. 节约时间

. 使你的网站更强健

. 帮助你编写更复杂的系统

它使你更好地享受编程乐趣, 而不是一个干苦活的体力工。

有相当多的框架, 还有很多是为其它语言开发的。 他们都能减少编码的重复工作,使编写复杂程序变得更容易, 而且建立一个合理的系统架构。

这篇文章不制造框架大战。文章中已经解释了选择CI理由,让它为你节约更多的时间用在学习工作和生活中吧,请享用它!

时间: 2024-12-30 14:10:44

使用 CodeIgniter 框架快速开发 PHP 应用(一)的相关文章

使用 CodeIgniter 框架快速开发 PHP 应用(二)

原文:使用 CodeIgniter 框架快速开发 PHP 应用(二)二分钟: 建立一个 CodeIgniter 网站 用CI建一个网站很容易. 这一章很短,解释了用CI制作网站时发生了些什么,哪些文件被创建,让我们来瞧一瞧: . 创建网站需要什么软件? . 安装 CI 文件: 一个简单的下载和解压缩操作 . CI 的基本设置: 有哪些文件夹及它们是如何组织的 . CI 安装时默认的控制器和视图 . 一些简单的修改来演示CI如何运作 准备知识 CodeIgniter 有较好的版本兼容性. 它工作在

使用 CodeIgniter 框架快速开发 PHP 应用(三)

原文:使用 CodeIgniter 框架快速开发 PHP 应用(三)分析网站结构 既然我们已经安装 CI ,我们开始了解它如何工作. 读者已经知道 CI 实现了MVC式样. 通过对目录和文件的内容进行分类, 而不是让代码大块大块地纠集在一起. 这一章,我们将会对 MVC 理论做个简短的介绍, 然后再介绍 CI 的MVC实现方式.特别地,要了解那些目录和文件如何互相交换信息?网站结构是怎样的?以及CI是如何自如地动作于其中的? 这一章将会介绍: .MVC 如何架构一个动态网站 .CI如何接收和分析

使用 CodeIgniter 框架快速开发 PHP 应用(六)

原文:使用 CodeIgniter 框架快速开发 PHP 应用(六) 简化使用 Session 和安全 理论说得够多了! 现在让我们开始写我们自己的应用. 在这一章里,我们将会大致描述一下我们要建立的一个应用系统,而且我们分析一些会影响到网站系统的的基本问题也就是会话管理和安全. 在这一章,我们将会见到: .如何使你的网页安全 .如何使用 CI 的会话类 开始用 CI 设计一个实际的网站 我们已经看过 CI 安装时生成的welcome页以及它内部动作中控制器文件和视图文件的动作流程. 实际上这就

使用 CodeIgniter 框架快速开发 PHP 应用(七)

原文:使用 CodeIgniter 框架快速开发 PHP 应用(七) CodeIgniter 和对象 这是玩家章节.它讲述的是 CodeIgniter 的工作原理,也就是揭开CI头上'神秘的面纱'.如果你是 CI 的新手,你可能想要跳过它.不过, 迟早, 你可能想要了解CI的幕后在发生什么 ,为什么不真正的玩转它呢? 当我刚开始使用 CodeIgniter 的时候,对象使我迷惑. 我是在使用 PHP 4的时候接触CI的, PHP4并不是真正的面向对象的语言.我在一大堆对象和方法.属性和继承,还有

使用 CodeIgniter 框架快速开发 PHP 应用(四)

原文:使用 CodeIgniter 框架快速开发 PHP 应用(四)使用 CI 简化数据库开发 你学习CI 是因为你想要使编程更容易和更有生产力.这一章讲述CI的Active Record类. 如果CI只提供一个Active Record类,它还是物超所值的.当然,CI是免费的,只不过我要强调Active Record(以后简称AR)类的价值是非常高的,它是你提高生产力的主要工具. AR使你以最小的代价获得最大的回报. 它简单,易于使用和维护. 这一章描述CI如何连接到一个数据库,你如何使用AR

Grails一个适合快速开发的web开源框架

本文将介绍一种更为通用的封装方案,该方案中通过组合使用 dojo.Stateful.dojo.xhr.dojo.Deferred 等常用类及方法,使开发者用一种面向对象的.简单透明的方式,实现客户端与 REST 风格的 API 之间的同步或者异步的交互. 本文将使用 Dojo 1.7 并遵循 AMD 的规范,设计并实现与 REST API 交互的 Web 前端http://www.aliyun.com/zixun/aggregation/14208.html">数据模型. 准备工作 安装

提供几个后台快速开发的UI框架

问题描述 提供几个后台快速开发的UI框架 解决方案

巧用第三方快速开发Android App 热门第三方SDK及框架

巧用第三方快速开发Android App 热门第三方SDK及框架 历经大半年的时间,终于是把这门课程给录制出来了,也就在今天,正式在慕课网上上线了 项目地址:巧用第三方快速开发Android App 热门第三方SDK及框架 这这篇博客也是专门来聊聊这门课程有什么不一样,首先,这门课程是比较针对于快速学习,快速上手的同学的,所以这是面向参加工作或者准备参加工作的同学所迫切需要的,因为只有你掌握了这些,对于你实际开发中才是有帮助的,当然,你要是还在校,那也没关系的,学习本身就是一法通万法,但是你们却

AJAX和Java快速开发平台ThinkCap&amp;nbsp;JX

ajax ClearNova将会开源旗下的ThinkCap JX AJAX 和Java 快速开发平台, 基于GPL协议进行开源. ClearNova公司发布的ThinkCap JX 快速平台,基于 Struts, Hibernate, JFreeChart等25种开源框架,把J2EE 和Ajax结合了起来,为开发者提供快速的J2EE和AJAX开发. ThinkCAP JX Workbench,价格499美金,可以创建page flows, forms, persisted objects, da