原文:
使用 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
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写一个数据输入窗口, 你想要一个下拉输入框。下拉框中有三个选项。代码以下:
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理由,让它为你节约更多的时间用在学习工做和生活中吧,请享用它!