-
Notifications
You must be signed in to change notification settings - Fork 27
/
15.html
295 lines (295 loc) · 19.5 KB
/
15.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>第十五章 资源和扩展</title>
<link href="css/main.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/main.js"></script>
</head>
<body>
<div id="container"><a name="top"></a>
<div id="header">
<div class="title"><a href="14.html">上一页</a> | <span style="color:#aaa">下一页</span> | <a href="table_of_contents.html">目录</a> | <a href="#bottom">转到页尾</a></div>
</div>
<div id="content">
<div class="main">
<h1>第十五章 资源和扩展</h1>
<p>好了,我们已经相当完整的讲解了 CI,并且,我希望能给你留下深刻的印象。在这个过程中,我们自己也编写了一些代码。我敢肯定,当你看过我的一些代码后,你会开始思考:“我可以写这么好...”。每个人都有自己的风格,并且 CI 给你很多的自由。</p>
<p>在 CI 社区里有很多可以写出好代码的人,幸好他们中的许多人正准备利用业余时间做这件事情。所以,有很多代码能为您节省大量的工作。拿一个例子来说,你要创建一个数据取自数据库的动态图形,你可以坐下来好好写自己的代码,但实际上,至少有 3 个人已经解决了这个问题,并且他们都把其代码提供给了你。</p>
<p>最后一章介绍一些你可以借鉴的资源,使你的编码快捷又方便。CI 有一个繁荣和活跃的社区,并且可用的资源一直都在发生变化,所以,我也没有试图制作一个完整的清单,只是让你知道这里有什么,并且到哪里可以看到。</p>
<p>这是一个警告提示,太多的混乱代码很容易让人头晕。一些人写项目的时候,只注重代码的漂亮。大多数人都喜欢写代码,而没有写评论和注释的习惯。正因为这样,很多人就不容易理解一些类库和插件的使用方法。</p>
<p>接下来,让我们看看这本书的最后一章所能给我们提供的帮助吧。</p>
<ul>
<li>首先,让我们看看源代码。</li>
<li>然后,让我们看几个主题,并比较可用的代码。</li>
<li>最后,让我们看看更普遍的帮助源:在 PHP、MySQL 和 Apache 上。</li>
</ul>
<a name="C_15_1"></a>
<h2>15.1 CI 的用户论坛</h2>
<p>CI 有两个主要的资源:</p>
<ul>
<li>用户论坛的地址是 <a href="http://www.codeigniter.com/forums/" target="_blank">http://www.codeigniter.com/forums/</a>,这里对大多数 CI 问题进行活跃的、几乎连续不断的讨论。评论和建议并不一定总有用(或准确),但也有一些“资深会员”,他们经常贡献很多智慧。它同样是一个非常友好的论坛;人们问一些非常明显的“菜鸟”问题,也会得到耐心并有价值的回复。有时 Rick Ellis 自己也会被一些东西所吸引,但他并没有去涉及所有领域确实是明智之举。</li>
</ul>
<p><img src="images/CodeIgniter-35.jpg" /></p>
<a name="I_CodeIgniter_wiki"></a>
<ul>
<li>Wiki 的地址是 <a href="http://www.codeigniter.com/wiki/" target="_blank">http://www.codeigniter.com/wiki/</a>。这是一个集提示、技巧、Hack、插件和功能强化为一体的知识库,它包含很多有用的代码,尽管涉及的范围还不是很系统化。</li>
</ul>
<p><img src="images/CodeIgniter-36.gif" /></p>
<p>论坛和 Wiki 使用起来都很简单:你只需为自己(免费)建立会员账号,然后登陆就可以做自己的事情了。</p>
<p>如果你认真的使用 CI,那么有必要设置你的 RSS 阅读器来订阅 Wiki 的“近期更改” Feed。</p>
<p>然而,请记住:</p>
<ul>
<li>并不是所有的插件编写者像 Rick Ellis 那样技术精湛,他们的作品可能会有一些 BUG 或问题。</li>
<li>一些在 CI 1.5 版本出现之前编写的早期插件可能需要修改,因为类库的初始化方式已经改变(见第十二章)。这并不是很难修改,但是也证实了这些类库超出一定范围之后就难以稳定的运行。</li>
</ul>
<a name="C_15_2"></a>
<h2>15.2 视频教程</h2>
<p>如果你想有人手把手的教你完成第一个 CI 应用程序的话,那么,在 CI 的网站上有 3 个优秀的视频教程。</p>
<ul>
<li>对 CI 的介绍。</li>
<li>20 分钟建立一个 Blog。Derek Jones 建立了基本的 Blog 页面,向你展示怎样去设置这个网站,编写数据库查询,以及在视图中展示结果。</li>
<li>由 Derek Allard 制作的视频(详见 <a href="http://video.derekallard.com/" target="_blank">http://video.derekallard.com/</a>),它描述了除其他事项外,如何利用 Scriptaculous 类库去集成 AJAX 和 JavaScript 特效。在下面的图片中,它向你展示如何去构建一个用 Ajax 更新的,有自动完成功能的文本输入下拉框。</li>
</ul>
<p><img src="images/CodeIgniter-37.jpg" /></p>
<a name="C_15_2_1"></a>
<h2>15.2.1 可用的插件和类库</h2>
<p>Rick Ellis 的目的和希望是:CI 的用户能够把“插件”或类库贡献出来用于帮助其他的 CI 用户。这个框架刚出现大约一年,但已经有了很多有趣的代码。</p>
<p>插件和类库的数量在稳步的增长,已有的插件和类库也在不断的更新。因此下一节并不是一个全面的介绍:只有一部分相关的说明是你觉得有用的。我很抱歉,一直以来我漏掉了很多好资料:请务必亲自查看 Wiki。</p>
<a name="C_15_2_2"></a>
<h2>15.2.2 AJAX/JavaScript</h2>
<p>在 Wiki 里包含了 2 个 AJAX 包:其中一个使用 XAJAX,另外一个使用 prototype.js/scriptaculous.js 类库。</p>
<table width="95%" border="1" align="center" cellpadding="5" cellspacing="0">
<tr>
<td width="18%" valign="top"><strong>名称</strong></td>
<td><strong>Ajax for CI 1.5.1</strong></td>
</tr>
<tr>
<td valign="top">URL</td>
<td><a href="http://www.codeigniter.com/wiki/AJAX_for_CodeIgniter/" target="_blank">http://www.codeigniter.com/wiki/AJAX_for_CodeIgniter/</a></td>
</tr>
<tr>
<td colspan="2" valign="top"><p>使用 prototype.js 和 scriptaculous.js 类库</p></td>
</tr>
<tr>
<td colspan="2" valign="top"><p>下载包括了 .js 文件和 .php 文件,以及一个完整的用户指南。(如果你没有很好的掌握 AJAX 和 DOM 的话,这是不容易理解的,不过一些例子有助于你理解它。)简单的安装:把 .php 文件放到你的 application/libraries 文件夹下,把 .js 文件放到你的根目录下。因为刚刚正式发布,所以在 CI 的论坛上只有很少的讨论。</p></td>
</tr>
<tr>
<td valign="top">作者</td>
<td>siric</td>
</tr>
</table>
<br />
<table width="95%" border="1" align="center" cellpadding="5" cellspacing="0">
<tr>
<td width="18%" valign="top"><strong>名称</strong></td>
<td><strong>XAJAX</strong></td>
</tr>
<tr>
<td valign="top">URL</td>
<td><a href="http://www.codeigniter.com/wiki/XAJAX/" target="_blank">http://www.codeigniter.com/wiki/XAJAX/</a></td>
</tr>
<tr>
<td colspan="2" valign="top"><p>XAJAX 类库的一个 CI“前端”。包括其自己的 Javascript 文件,xajax.js</p></td>
</tr>
<tr>
<td valign="top">作者</td>
<td>Greg McLellan—基于 xajax 的 php 类库(详见 <a href="http://www.xajaxproject.org/" target="_blank">http://www.xajaxproject.org/</a>)</td>
</tr>
</table>
<a name="C_15_2_3"></a>
<h2>15.2.3 身份验证</h2>
<p>Wiki 上的用户也困于安全问题:这 3 个包用于验证你的用户,并避免保存 Session 数据在 Cookie 中所可能出现的陷阱。</p>
<table width="95%" border="1" align="center" cellpadding="5" cellspacing="0">
<tr>
<td width="18%" valign="top"><strong>名称</strong></td>
<td><strong>FreakAuth_light</strong></td>
</tr>
<tr>
<td valign="top">URL</td>
<td><a href="http://www.4webby.com/freakauth/" target="_blank">http://www.4webby.com/freakauth/</a></td>
</tr>
<tr>
<td colspan="2" valign="top"><p>它包括一个类库</p>
<ul>
<li>用户登录/退出</li>
<li>用户注册</li>
<li>记住密码</li>
<li>修改密码</li>
<li>锁定网站的保留区域</li>
</ul>
<p>一个后台管理程序:</p>
<ul>
<li>管理用户</li>
<li>管理管理员</li>
</ul>
<p>它允许你设置 4 个访问级别(从超级管理员到来宾),然后在控制器中设置一个“check”方法。它既能被设置在控制器的构造函数中,也能被设置在某个指定的函数中。如果用户调用控制器(或指定的函数),这段代码将检查他(她)是否登陆。</p></td>
</tr>
<tr>
<td colspan="2" valign="top"><p>在编写这段代码的时候,CI 论坛上正在对其进行广泛的讨论。一些错误已被发现,但是这段代码已发布到第三版了,这些错误看起来已经解决了。</p></td>
</tr>
<tr>
<td valign="top">作者</td>
<td>danfreak</td>
</tr>
</table>
<br />
<table width="95%" border="1" align="center" cellpadding="5" cellspacing="0">
<tr>
<td width="18%" valign="top"><strong>名称</strong></td>
<td><strong>Auth</strong></td>
</tr>
<tr>
<td valign="top">URL</td>
<td><a href="http://www.codeigniter.com/wiki/auth" target="_blank">http://www.codeigniter.com/wiki/auth</a></td>
</tr>
<tr>
<td colspan="2" valign="top"><p>这个包提供了登录/退出功能,带激活的注册,甚至忘记密码功能。它搭建起来非常复杂:你必须建立一个数据库表,引入一些核心的库文件和帮助文件,然后还要作一些配置。</p></td>
</tr>
<tr>
<td colspan="2" valign="top"><p>在 CI 1.5 下运行。</p></td>
</tr>
<tr>
<td valign="top">作者</td>
<td>(匿名/未知)</td>
</tr>
</table>
<br />
<table width="95%" border="1" align="center" cellpadding="5" cellspacing="0">
<tr>
<td width="18%" valign="top"><strong>名称</strong></td>
<td><strong>DB Session</strong></td>
</tr>
<tr>
<td valign="top">URL</td>
<td><a href="http://www.codeigniter.com/wiki/DB_Session/" target="_blank">http://www.codeigniter.com/wiki/DB_Session/</a><br />
<a href="http://dready.jexiste.fr/dotclear/index.php?2006/09/13/19-reworked-session-handler-for-code-igniter" target="_blank">http://dready.jexiste.fr/dotclear/index.php?2006/09/13/19-reworked-session-handler-for-code-igniter</a></td>
</tr>
<tr>
<td colspan="2" valign="top"><p>修改 CI 的 Session 类(见第六章),它把 Session 数据存储在 Cookie 里。(当然 Cookie 可加密。)这个类只存储 Session 标识符:你在数据库中添加一个额外的表,它将在那里查找所有的 Session 信息。</p></td>
</tr>
<tr>
<td colspan="2" valign="top"><p>在 CI 1.5 下运行。</p></td>
</tr>
<tr>
<td valign="top">作者</td>
<td>dready</td>
</tr>
</table>
<a name="C_15_2_4"></a>
<h2>15.2.4 外部网站</h2>
<p>有一些 CI 的“强大用户”,他们贡献他们自己的代码。一个很好的例子是 Glossopteris,它是一个美国网页设计公司经营的网站。他们提供了一些自己的类库,例如(地址是 <a href="http://www.glossopteris.com/journal/post/table-relationships-in-ci" target="_blank">http://www.glossopteris.com/journal/post/table-relationships-in-ci</a>)另外一个 CRUD 类库,他们声称“将允许指定复杂的表内关系,并完成简单的 CRUD 操作。”它遵循 Rails 的惯例:你可以在表之间定义“一对一”和“一对多”的关系。虽然代码是现成的,但还应该多写一些注释,或者制作一个用户指南。</p>
<p>另外一个网站是 CI_Forge(<a href="http://www.ciforge.com/" target="_blank">http://www.ciforge.com/</a>),它是“一个用于项目设计,为了增强和扩展轻量级 PHP 框架 CodeIgniter 的地方。”它提供 Subversion 和 Trac 主机、一个 Wiki 和一个问题跟踪程序并且支持变更记录。这虽然是一个新的应用,但是(在 2007 年 7 月)已经托管了 20 个项目。</p>
<a name="C_15_2_5"></a>
<h2>15.2.5 比较:使用哪个图表类库?</h2>
<p>图表类库可选择的范围很大。有时会有非常多的选择。</p>
<p>为了演示它,让我们看一下做同一件事情的三种选择,并看看他们有什么不同。自己制作动态数据图表不是一件简单的事情,但它确实使你的网站变漂亮了。</p>
<p>让我们来看 3 个 CI 的插件,然后像看他们生成的结果一样尝试去比较他们的强项和弱点。</p>
<table width="95%" border="1" align="center" cellpadding="5" cellspacing="0">
<tr>
<td width="18%" valign="top">名称</td>
<td>3d-pie-chart</td>
</tr>
<tr>
<td valign="top">URL</td>
<td><a href="http://codeigniter.com/wiki/3d-pie-chart/" target="_blank">http://codeigniter.com/wiki/3d-pie-chart/</a></td>
</tr>
<tr>
<td colspan="2" valign="top"><p>由两个数组(标签和值)生成一个饼图,然后把它保存在你的网站上。看起来很棒,但这是它所能做的一切。</p>
<p><img src="images/CodeIgniter-38.gif" /></p></td>
</tr>
<tr>
<td colspan="2" valign="top"><p>简单设置:把 piechart.zip 文件放在你的 application/libraries 文件夹中,然后写一个基于例子的控制器。需要一个字体文件,然后你需要修改一个视图来显示结果。在 CI 1.5 版本下运行。</p></td>
</tr>
<tr>
<td valign="top">作者</td>
<td>Craig</td>
</tr>
</table>
<br />
<table width="95%" border="1" align="center" cellpadding="5" cellspacing="0">
<tr>
<td width="18%" valign="top">名称</td>
<td>Panaci</td>
</tr>
<tr>
<td valign="top">URL</td>
<td><a href="http://bleakview.orgfree.com/" target="_blank">http://bleakview.orgfree.com/</a> 或<br />
<a href="http://codeigniter.com/wiki/Charting/" target="_blank">http://codeigniter.com/wiki/Charting/</a></td>
</tr>
<tr>
<td colspan="2" valign="top"><p>动态生成图表和图形,包括:条,线,区域,阶梯,以及脉冲图(而不是饼图)。在其 Wiki 页面中声明:“请注意,这不是一个像 jpgraph 或 chartdirector 的商业级类库,但是它足够能胜任基本的绘图需要”。下面的代码示例和样本图展示了它的样子,以及怎样去使用它。</p>
<p><img src="images/CodeIgniter-39.gif" /></p></td>
</tr>
<tr>
<td colspan="2" valign="top"><p>在 CI 1.5 版本下运行。和 3d-pie-chart 一样,你复制文件到你的 application/libraries 文件夹中,然后从控制器中调用它(提供基本的参数和一个数组数据)。</p>
<p>在 CI 论坛上的讨论很简短,所以,在编写本书时没有发现大的错误。</p></td>
</tr>
<tr>
<td valign="top">作者</td>
<td>Oscar Bajner</td>
</tr>
</table>
<br />
<table width="95%" border="1" align="center" cellpadding="5" cellspacing="0">
<tr>
<td width="18%" valign="top">名称</td>
<td>JP Graph</td>
</tr>
<tr>
<td valign="top">URL</td>
<td><a href="http://codeigniter.com/wiki/JP_Graph/" target="_blank">http://codeigniter.com/wiki/JP_Graph/</a></td>
</tr>
<tr>
<td colspan="2" valign="top"><p>严格的讲,这不是一个插件:它是一段在 CI 和外部 JP Graph 类库之间提供接口的代码。你需要下载 JP Graph 类库,为每个你需要使用的图形类型建立一系列插件,然后当你需要他们时再从控制器中调用。 </p>
<p>正如其网站上的这些例子图表:<a href="http://www.aditus.nu/jpgraph/features.php" target="_blank">http://www.aditus.nu/jpgraph/features.php</a> 所显示的,JP Graph 提供了范围更加广阔的图表,并且他们看起来很不错。</p>
<p><img src="images/CodeIgniter-40.gif" /></p></td>
</tr>
<tr>
<td colspan="2" valign="top"><p>JP Graph 有两个缺点。正如其 Wiki 页面中所说:“请记住 JpGraph 有一个非常庞大的代码库,所以请确保为每个图表只引入你需要的类库。”其次,JP Graph 对个人使用是免费的,但是商业使用并不免费。</p></td>
</tr>
<tr>
<td valign="top">作者</td>
<td>Aditus Consulting</td>
</tr>
</table>
<p>关于这三个选择:前两个相对简单,第三个复杂一些。这个取决于你的需求(如果你准备购买的话)。</p>
<a name="C_15_2_6"></a>
<h2>15.2.6 CRUD:新领域</h2>
<p>几乎在所有的应用程序中你都要用到 CRUD。它能简单、逻辑化的自动完成页面的生成。它们是最最基础的,虽然它们存在有千百万种的形式。如果不按你的方式制订规则并让用户来遵守,要写出一个应用程序几乎是不可能的。因此,你需要在考虑尽可能多的可能性方面和在简化使用方面做出权衡。你考虑到的特例情况和可能性越多,代码就会变得越复杂,需要下载的也会越多。</p>
<p>所以,很多人已经开始尝试使 CRUD 的基本操作更简洁。</p>
<p>在第十三章中,我们已经尝试开发了我们自己的 CRUD 应用程序。这是一个相当简单的模型,它截掉了很多细枝末节,仅仅允许你使用 HTML 表单对象的部分功能;但它确实拥有验证功能。</p>
<p>在本章中,我们已经提到了 Glossopteris 类库。</p>
<p>另外一个有趣的实现是“CodeCrafter”,它被列在 CI 的 Wiki 上面,同时也发表在南非的 Datacraft 软件咨询网站上(<a href="http://www.datacraft.co.za/index.php?contents=codecrafter/codecraft" target="_blank">http://www.datacraft.co.za/index.php?contents=codecrafter/codecraft</a>)。该网站声称:“CodeCrafter 将会帮助你在仅仅几秒钟内生成你的全部 CodeIgniter 应用程序。”它有一个 26 页的在线手册,该手册向你展示了如何使用它的接口去生成 CI 代码。与大多数其他方法不同的评论如下:它使用图形化的界面为你构建 CI 代码,而不是提供供你调用的类库或代码。</p>
<p>SuperModel (详见 <a href="http://codeigniter.com/wiki/SuperModel/" target="_blank">http://codeigniter.com/wiki/SuperModel/</a>) 就是:“SuperModel 类库是模型的一个扩展,使一般的表单生成和验证工作自动化。想一下脚手架(scaffolding)吧。”</p>
<p>在 SuperModel 作者的一篇评论中阐述了编写这类代码所面临的困难以及用户所承担的风险。他说:“请注意这个类库是一个正在开发的产品。我目前正在做很多修改,包括对 API 的修改,这些修改将不兼容于旧的程序。在我写此文(2006年5月30日)的同时,我正在努力实现一对多和多对多的关联查询。不幸的是,这个类库迫使你以某种方式来工作。我试图让它尽可能的小巧灵活,但是同时,在小巧灵活和复杂臃肿之间必须找到一个平衡点,以上就是其作为一个外部第三方类库出现的原因—你可以自由的编写你需要的模型,或者使用其他类似功能的第三方类库。”</p>
<a name="C_15_2_7"></a>
<h2>15.2.7 其它编程资源,例如 Xampplite、MySQL 和 PHP</h2>
<p>有许多对 PHP 有用的资源。来让我们略微涉及一下他们。</p>
<p>1.PHP 可以从 <a href="http://www.php.net" target="_blank">www.php.net</a> 上免费下载,也包括了完整的手册。</p>
<p>2.廉价的 PHP 编辑器可以从 MP Software <a href="http://www.mpsoftware.dk/" target="_blank">http://www.mpsoftware.dk/</a> 那里购买。</p>
<p>有许多关于 PHP 的好书,包括《PHP Programming with PEAR》,作者是 Carsten Lucke、Aaron Wormus、Stoyan Stefanov 和 Stephan Schmidt,出版社是 Packt。</p>
<p>在你自己的机器上运行本地 Web 服务器,尝试看一下 <a href="http://www.apachefriends.org/en/index.html" target="_blank">http://www.apachefriends.org/en/index.html</a>—一个免费提供 XAMPP 包下载的站点。它将安装一个 Apache Web 服务器、MySQL、PHP 和 Perl。如果 XAMPP 包对你来说太全面,请尝试这个站点上的 Minixampp,本书的代码就是在这个环境下编写的。</p>
<p>MySQL 同样拥有自己的网页— <a href="http://www.mysql.com/" target="_blank">http://www.mysql.com/</a> —不过,如果你想免费下载最新版本,请到 <a href="http://dev.mysql.com/" target="_blank">http://dev.mysql.com/</a>。(请记住虽然很多 ISP 都没有使用最新的版本。虽然 MySQL 的最新版本是 5,但是大多数 ISP 仍旧使用版本 4。这阻止了你使用某些更有趣的新特性,例如存储过程。)更多内容请参考《Creating your MySQL Database: Practical Design Tips and Techniques》, 作者是 Marc Delisle,出版社是 Packt。</p>
<p>虽然 MySQL 有它自己的工具,但是最流行(也是最常见的)的工具是 PHPMyAdmin。(更多内容请参考《Mastering phpMyAdmin 2.8 for Effective MySQL Management》,作者也是 Marc Delisle,出版社是 Packt。)</p>
<a name="C_15_3"></a>
<h2>15.3 总结</h2>
<p>在本章中,我们为你展示了一些当你开始用 CI 编程时要用到的资源。有很多现成的代码可以使用,你需要在使用之前好好的看看它们:不要一看到满足你需要的插件或类库就直接开始使用。你需要好好的研究这些代码,看看他们是如何工作的,这对你整体把握代码很有帮助,并且有利于你更好的理解它。不管怎样,只要你决定使用 CI 框架,你就能找到各种不同层次和复杂程度的类库,它们将完成很多要由你手工完成的任务。</p>
<p>我们详细介绍了这些类库:</p>
<ul>
<li>AJAX 和 JavaScript</li>
<li>身份验证</li>
<li>图表</li>
<li>CRUD</li>
</ul>
<p>最后,我们介绍了一些关于 PHP、MySQL 和运行一个本地 Web 服务器所需要的资源。</p>
</div>
</div>
<a name="bottom"></a>
<div id="footer">
<div class="title"><a href="14.html">上一页</a> | <span style="color:#aaa">下一页</span> | <a href="table_of_contents.html">目录</a> | <a href="#top">转到页首</a></div>
<div style="clear:none">第十五章 资源和扩展</div>
</div>
</div>
</body>
</html>