当前位置:首页 >> 互联网 >>

Codeigniter2.1中文手册


CodeIgniter 用户指南 (版本 2.1.0)

CodeIgniter 用 户指南 (版本

CodeIgniter 用户指南 (版本 2.1.0)

2.1.0)

CodeIgniter 用户指南 (版本 2.1.0)

Table of Contents
1. 首页 - CodeIgniter 用户指南 ................................. 77 欢迎使用 CodeIgniter ........................... 78 CodeIgniter 是为谁准备的? ............... 79 2. 目录 .......................................................................... 81 3. 介绍 .......................................................................... 91 3.1 CodeIgniter 是什么?..................................... 91 CodeIgniter 是一个应用程序框架 ....... 92 CodeIgniter 是免费的 ........................... 92 CodeIgniter 是轻量级的 ....................... 93 CodeIgniter 是快速的 ........................... 94 CodeIgniter 使用 M-V-C 模型 ......... 94
1

CodeIgniter 用户指南 (版本 2.1.0)

CodeIgniter 生成干净的 URL ............ 95 CodeIgniter 功能强大 ........................... 96 CodeIgniter 是可扩展的 ....................... 96 CodeIgniter 不需要模板引擎 ............... 97 CodeIgniter 已彻底文档化 ................. 100 CodeIgniter 拥有一个友好的用户社区 ..................................................................... 101 3.2 CodeIgniter 速记表....................................... 102 类库参考 ..................................................... 102 辅助函数参考 ............................................. 103 3.3 MVC................................................................ 104 3.4 开始 .............................................................. 106 3.5 目标 .............................................................. 108 3.6 特性 .............................................................. 111
2

CodeIgniter 用户指南 (版本 2.1.0)

3.7 应用程序流程 .............................................. 115 4. 安装 ........................................................................ 118 4.1 安装指导 ...................................................... 118 4.2 从 1.1 升级到 1.2 最终版 ........................ 122 4.3 从 1.2 升级到 1.3 ...................................... 124 Step 1: Update your CodeIgniter files ............................................................ 125 Step 2: Update your error files . 127 Step 3: Update your index.php file ..................................................................... 129 Step 4: Update your config.php file ..................................................................... 130 Step 5: Update your database.php file .............................................................. 137
3

CodeIgniter 用户指南 (版本 2.1.0)

Step 6: Update your user guide 138 4.4 从 1.3 升级到 1.3.1 ................................... 138 Step 1: Update your CodeIgniter files ............................................................ 139 Step 2: Update your user guide 141 4.5 从 1.3.1 升级到 1.3.2 ................................ 141 Step 1: Update your CodeIgniter files ............................................................ 142 Step 2: Update your user guide 144 4.6 从 1.3.2 升级到 1.3.3 ................................ 144 Step 1: Update your CodeIgniter files ............................................................ 145 Step 2: Update your Models ........ 147 Step 3: Update your user guide 148
4

CodeIgniter 用户指南 (版本 2.1.0)

4.7 从 1.3.3 升级到 1.4.0 ................................ 149 Step 1: Update your CodeIgniter files ............................................................ 150 Step 2: Update your config.php file ..................................................................... 151 Step 3: Update your user guide 157 4.8 从 1.4.0 升级到 1.4.1 ................................ 158 Step 1: Update your CodeIgniter files ............................................................ 159 Step 2: Update your config.php file ..................................................................... 160 Step 3: Rename an Autoload Item ..................................................................... 164 Step 4: Update your user guide 166
5

CodeIgniter 用户指南 (版本 2.1.0)

4.9 从 1.4.1 升级到 1.5.0 ................................ 166 Step 1: Update your CodeIgniter files ............................................................ 167 Step 2: Update your database.php file .............................................................. 169 Step 3: Update your config.php file ..................................................................... 170 Step 4: Update your main index.php file ....................................... 177 Step 5: Update your user guide 178 4.10 从 1.5.0 升级到 1.5.2 .............................. 179 Step 1: Update your CodeIgniter files ............................................................ 180 Step 2: Update your user guide 182
6

CodeIgniter 用户指南 (版本 2.1.0)

4.11 从 1.5.2 升级到 1.5.3 .............................. 183 第一步: 升级你的 CodeIgniter 文件 . 184 第二步:升级你的用户指南 ..................... 185 4.12 从 1.5.3 升级到 1.5.4 .............................. 186 第一步: 升级你的 CodeIgniter 文件 . 186 第 二 步 : 增 加 charset 到 你 的 config.php .............................................. 187 第三步:自动加载语言文件 ..................... 190 第四步: 升级你的用户指南 ...................... 191 4.13 从 1.5.4 升级到 1.6.0 .............................. 191 第一步: 更新你的 CodeIgniter 文件 . 192 第二步:在你的配置文件 config.php 中添 加 time_to_update............................. 193 第三步: 添加 $autoload['model'] . 194
7

CodeIgniter 用户指南 (版本 2.1.0)

第四步: 修改你的数据库配置文件 database.php ....................................... 196 第五步: 更新你的用户参考手册 .............. 198 4.14 从 1.6.0 升级到 1.6.1 .............................. 199 步 骤 1: 更 新你 的 CodeIgniter 文 件 ..................................................................... 199 步骤 2:更新你的用户指南..................... 201 4.15 从 1.6.1 升级到 1.6.2 .............................. 201 Step 1: Update your CodeIgniter files ............................................................ 202 Step 2: Encryption Key .................. 203 Step 3: Constants File..................... 204 Step 4: Mimes File ............................ 204 Step 5: Update your user guide 205
8

CodeIgniter 用户指南 (版本 2.1.0)

4.16 从 1.6.2 升级到 1.6.3 .............................. 206 步 骤 1: 更 新你 的 CodeIgniter 文 件 ..................................................................... 206 步骤 2:更新你的用户指南..................... 207 4.17 从 1.6.3 升级到 1.7.0 .............................. 208 Step 1: Update your CodeIgniter files ............................................................ 209 Step 2: Update your Session Table ..................................................................... 210 Step 3: Update your Validation Syntax ...................................................... 212 Step 4: Update your user guide 213 4.18 从 1.7.0 升级到 1.7.1 .............................. 214 Step 1: Update your CodeIgniter
9

CodeIgniter 用户指南 (版本 2.1.0)

files ............................................................ 215 Step 2: Update your user guide 216 4.19 从 1.7.1 升级到 1.7.2 .............................. 217 第 1 步: 升级你的 CodeIgniter 文件 ..................................................................... 217 第 2 步: 将 404 错误模板中的 header() 移除 ............................................................. 219 第 3 步: 升级你的用户手册 ..................... 220 4.20 从 1.7.2 升级到 1.7.3 .............................. 220 第 1 步: 升级你的 CodeIgniter 文件 ..................................................................... 221 第 2 步: 升级你的用户手册 ................... 222 4.21 从 1.7.3 升级到 2.0.0 .............................. 223 第 1 步: 升级你的 CodeIgniter 文件
10

CodeIgniter 用户指南 (版本 2.1.0)

..................................................................... 223 第 2 步 : 在 必 要 的 地 方 调 整 get_dir_file_info()函数 ................... 224 第 3 步: 将你的插件转换成辅助函数 Step 3: Convert your Plugins to Helpers ..................................................................... 225 第 4 步:升级存储的已加密数据........... 227 第 5 步:删除对兼容性辅助函数的调用 ..................................................................... 228 第 6 步:升级类的继承方式................... 228 第 7 步:升级对父类构造函数的调用... 229 第 8 步: 升级你的用户手册 ................... 229 4.22 从 2.0.0 升级到 2.0.1 .............................. 230 Step 1: Update your CodeIgniter
11

CodeIgniter 用户指南 (版本 2.1.0)

files ............................................................ 231 Step 2: Replace config/mimes.php ..................................................................... 232 Step 3: Check for forms posting to default controller .............................. 233 4.23 从 2.0.1 升级到 2.0.2 .............................. 235 Step 1: Update your CodeIgniter files ............................................................ 236 Step 2: Remove loading calls for the Security Library ......................... 237 Step 3: Move MY_Security ........... 238 4.24 从 2.0.2 升级到 2.0.3 .............................. 239 Step 1: Update your CodeIgniter files ............................................................ 240
12

CodeIgniter 用户指南 (版本 2.1.0)

Step 2: Update your main index.php file ....................................... 241 Step 3: Replace config/user_agents.php ............... 242 Step 4: Change references of the EXT constant to ".php" .................. 243 Step 5: Remove APPPATH.'third_party' from autoload.php ........................................ 243 Update Sessions Database Tables ..................................................................... 245 4.25 从 2.0.3 升级到 2.1.0 .............................. 247 Step 1: Update your CodeIgniter files ............................................................ 247
13

CodeIgniter 用户指南 (版本 2.1.0)

Step 2: Replace config/user_agents.php ............... 248 4.26 从 Beta 1.0 升级到 Beta 1.1 .................... 250 Step 1: Replace your index file . 250 Step 2: Relocate your config folder ..................................................................... 251 Step 3: Replace directories ......... 252 Step 4: Add the calendar language file .............................................................. 253 Step 5: Edit your config file ........ 254 4.27 从老版本升级 ............................................ 258 4.28 下载 CodeIgniter ....................................... 261 Git Server ......................................................... 263 4.29 疑难解答 .................................................... 265
14

CodeIgniter 用户指南 (版本 2.1.0)

5. 常规主题 ................................................................ 267 5.1 PHP 替代语法 ............................................... 267 自动短标记支持 ......................................... 268 替代 Echo ................................................. 269 替代控制结构 ............................................. 270 5.2 URI 路由........................................................ 274 设定你自己的路由规则 ............................. 276 通配符 ......................................................... 276 例子 ............................................................. 278 正则表达式 ................................................. 281 系统保留的路由 ......................................... 283 5.3 URL ................................................................. 285 URI 段 ....................................................... 286 删除 index.php 文件 ........................... 288
15

CodeIgniter 用户指南 (版本 2.1.0)

添加 URL 后缀 ........................................ 290 启用查询字符串 ......................................... 291 5.4 安全 .............................................................. 295 URI 安全 ................................................... 295 Register_globals ................................ 296 error_reporting .................................. 297 magic_quotes_runtime ................. 298 最佳实践 ............................................................. 298 ? XSS 过滤 ........................................... 299 ? 验证数据 ............................................. 300 ? 插入数据库之前转义所有数据 ......... 301 5.5 保留字 .......................................................... 301 5.6 处理多环境 .................................................. 307 ENVIRONMENT 常量.......................... 307
16

CodeIgniter 用户指南 (版本 2.1.0)

对默认框架行为的影响 ............................. 308 5.7 创建核心系统类 .......................................... 310 系统类清单 ................................................. 311 替换核心类 ................................................. 313 扩展核心类 ................................................. 315 5.8 创建你自己的类库 ...................................... 321 创建类库 ............................................................. 321 建立你的类库文件 ..................................... 323 命名约定 ..................................................... 324 类文件 ......................................................... 324 使用你自己的类 ......................................... 326 在初始化自定义类时传递参数 ................. 328 在你自定义的类库中初始化 CodeIgniter 资源 ............................................................. 331
17

CodeIgniter 用户指南 (版本 2.1.0)

用你自己的类替换原始类 ......................... 335 扩展现有类 ................................................. 337 5.9 创建适配器 .................................................. 342 5.10 错误处理 .................................................... 344 show_error(' 消 息 ' [, int $status_code = 500 ] [, string $heading = 'An Error Was Encountered']).................................... 345 show_404(' 页 面 ' [, 'log_error']) ..................................................................... 347 log_message('级别', '消息')............ 348 5.11 调试你的应用程序 .................................... 352 初始化类 ..................................................... 353 激活分析器 ................................................. 353
18

CodeIgniter 用户指南 (版本 2.1.0)

设定基准点 ................................................. 354 启用和禁用分析数据中的字段 ................. 355 5.12 服务器要求 ................................................ 360 5.13 辅助函数 .................................................... 361 载入辅助函数 ............................................. 363 载入多个辅助函数 ..................................... 364 自动载入辅助函数 ..................................... 365 使用辅助函数 ............................................. 366 "扩展" Helpers ...................................... 367 现在可以做什么? ....................................... 373 5.14 公共函数 .................................................... 375 is_php('version_number') ........... 375 is_really_writable('path/to/file') ..................................................................... 377
19

CodeIgniter 用户指南 (版本 2.1.0)

config_item('item_key') ............... 379 show_error('message'), show_404('page'), log_message('level', 'message') ..................................................................... 379 set_status_header(code, 'text'); ..................................................................... 380 remove_invisible_characters($str) ..................................................................... 381 html_escape($mixed) .................... 382 5.15 钩子 - 扩展框架的核心 ........................... 383 启用钩子 ..................................................... 384 定义钩子 ..................................................... 384 同一挂钩点的多次引用 ............................. 388
20

CodeIgniter 用户指南 (版本 2.1.0)

挂勾点 ......................................................... 393 5.16 关于 CodeIgniter ....................................... 396 5.17 管理你的应用程序 .................................... 397 对应用程序文件夹重命名 ......................... 398 更改你的应用程序的文件夹路径 ............. 399 在一个 CodeIgniter 下运行多个应用程 序 ................................................................. 400 5.18 开发规范 .................................................... 404 常用风格和语法 ................................................. 404 内容列表 ..................................................... 404 文件格式 ..................................................... 407 PHP 闭合标签 .......................................... 410 类和方法(函数)的命名规则 ................. 412 变量命名 ..................................................... 415
21

CodeIgniter 用户指南 (版本 2.1.0)

注释 ............................................................. 416 常量 ............................................................. 420 TRUE, FALSE, 和 NULL .................... 422 逻辑操作符 ................................................. 423 比较返回值与类型映射 ............................. 424 调试代码 ..................................................... 428 文件中的空格 ............................................. 429 兼容性 ......................................................... 432 使用常见词语来命名类和文件 ................. 433 数据库表名 ................................................. 435 一个文件一个类 ......................................... 438 空格 ............................................................. 440 换行 ............................................................. 441 代码缩进 ..................................................... 442
22

CodeIgniter 用户指南 (版本 2.1.0)

方括号及圆括号内的空格符 ..................... 443 本地化文本 ................................................. 445 私有方法和变量 ......................................... 446 PHP Errors ............................................. 447 短标记 ......................................................... 450 每行一条语句 ............................................. 451 字符串 ......................................................... 452 SQL 查询................................................... 454 函数的默认参数 ......................................... 456 5.19 控制器 ........................................................ 457 什么是控制器? ......................................... 459 让我们试试看: 你好,世界! ................ 460 方法 ............................................................. 464 将 URI 片段传递给方法 ......................... 467
23

CodeIgniter 用户指南 (版本 2.1.0)

定义默认控制器 ......................................... 472 重新定义方法的调用规则 ......................... 473 处理输出 ..................................................... 478 私有方法 ..................................................... 482 如何将控制器放入子文件夹中 ................. 483 构造函数 ..................................................... 486 已保留的方法名称 ..................................... 488 就这样了! ................................................. 489 5.20 快速参考图 ................................................ 491 5.21 模型 ............................................................ 493 什么是模型? ............................................... 494 剖析模型 ..................................................... 500 载入模型 ..................................................... 503 自动载入模型 ............................................. 508
24

CodeIgniter 用户指南 (版本 2.1.0)

连接到数据库 ............................................. 509 5.22 使用 CodeIgniter 类库 ............................. 513 使用 CodeIgniter 类库 .................................. 513 创建类库 ..................................................... 515 5.23 使用 CodeIgniter 适配器.......................... 516 使用 CodeIgniter 适配器 .............................. 516 创建自己的适配器 ..................................... 519 5.24 视图 ............................................................ 520 创建视图 ..................................................... 521 载入视图 ..................................................... 523 载入多个视图 ............................................. 525 用子文件夹存储视图 ................................. 528 给视图添加动态数据 ................................. 529 创建循环 ..................................................... 536
25

CodeIgniter 用户指南 (版本 2.1.0)

5.25 页面缓存 .................................................... 538 缓存是怎么工作的? ................................. 539 启动缓存 ..................................................... 540 清除缓存 ..................................................... 541 5.26 以 CLI 方式运行........................................ 542 以 CLI 方式运行 ................................................. 543 什么是 CLI? ............................................. 543 为什么使用命令行? ................................. 544 Let's try it: Hello World!.............. 545 That's it! ................................................. 548 5.27 自动装载资源 ............................................ 549 6. 类库参考 ................................................................ 552 6.1 CodeIgniter 用户指南................................... 552 欢迎使用 CodeIgniter ......................... 553
26

CodeIgniter 用户指南 (版本 2.1.0)

CodeIgniter 是为谁准备的? ............. 554 6.2 Email 类 ........................................................ 556 发送邮件 ..................................................... 557 设置 Email 参数 ..................................... 560 Email 参数 ............................................... 563 Email 函数参考 ....................................... 570 取消自动换行 ............................................. 581 6.3 FTP 类............................................................ 583 初始化类 ..................................................... 584 使用例子 ..................................................... 585 函数参考 ............................................................. 590 $this->ftp->connect() ................... 591 $this->ftp->upload()...................... 594 $this->ftp->download() ............... 595
27

CodeIgniter 用户指南 (版本 2.1.0)

$this->ftp->rename() .................... 597 $this->ftp->move()......................... 598 $this->ftp->delete_file() ............. 599 $this->ftp->delete_dir() .............. 599 $this->ftp->list_files().................. 601 $this->ftp->mirror()....................... 601 $this->ftp->mkdir() ........................ 602 $this->ftp->chmod() ...................... 603 $this->ftp->close(); ........................ 604 6.4 HTML 表格类 ................................................ 605 HTML 表格类 .................................................... 605 初始化类 ..................................................... 606 例子 ............................................................. 607 修改表格的外观 ......................................... 613
28

CodeIgniter 用户指南 (版本 2.1.0)

函数参考 ............................................................. 618 $this->table->generate() ............ 618 $this->table->set_caption() ...... 619 $this->table->set_heading() .... 619 $this->table->add_row() ............ 620 $this->table->make_columns() ..................................................................... 623 $this->table->set_template() .. 626 $this->table->set_empty() ........ 628 $this->table->clear() ..................... 628 $this->table->function .................. 632 6.5 Javascript 类 .................................................. 635 Javascript 类 ................................................... 635 初始化 Javascript 类........................... 636
29

CodeIgniter 用户指南 (版本 2.1.0)

安装与配置 ................................................. 638 jQuery 类 ................................................ 641 jQuery 事件 ............................................ 643 特效 ............................................................. 644 插件 ............................................................. 656 6.6 Session 类 ..................................................... 659 Session 类 ........................................................ 659 初始化 Session ...................................... 661 Sessions 是怎样工作的? .................... 662 Session 数据是什么? .......................... 663 取得 Session 数据 ................................ 667 添加自定义的 Session 数据 ................ 668 取得所有 Session 数据 ........................ 672 删除 Session 数据 ................................ 674
30

CodeIgniter 用户指南 (版本 2.1.0)

闪出数据 ..................................................... 675 将 Session 数据存入数据库 ................ 677 销毁 Session .......................................... 681 Session 的参数 ...................................... 682 6.7 URI 类............................................................ 691 $this->uri->segment(n) ............... 691 $this->uri->rsegment(n) ............. 695 $this->uri->slash_segment(n) 695 $this->uri->slash_rsegment(n) ..................................................................... 697 $this->uri->uri_to_assoc(n) ..... 697 $this->uri->ruri_to_assoc(n) ... 701 $this->uri->assoc_to_uri() ........ 702 $this->uri->uri_string() ............... 703
31

CodeIgniter 用户指南 (版本 2.1.0)

$this->uri->ruri_string() ............. 704 $this->uri->total_segments() .. 705 $this->uri->total_rsegments() 705 $this->uri->segment_array() ... 706 $this->uri->rsegment_array() . 707 6.8 User-Agent 类 ............................................... 708 初始化类 ..................................................... 709 用户代理定义 ............................................. 709 示例 .............................................................710 函数参考 .............................................................714 $this->agent->is_browser() .....714 $this->agent->is_mobile() .........716 $this->agent->is_robot() ............718 $this->agent->is_referral() .......719
32

CodeIgniter 用户指南 (版本 2.1.0)

$this->agent->browser() ............ 720 $this->agent->version() .............. 720 $this->agent->mobile() ............... 721 $this->agent->robot() .................. 721 $this->agent->platform() ........... 721 $this->agent->referrer() ............. 722 $this->agent->agent_string() .. 723 $this->agent->accept_lang() ... 724 $this->agent->accept_charset() ..................................................................... 725 6.9 XML-RPC 和 XML-RPC 服务器类 ................ 727 什么是 XML-RPC? .................................. 728 初始化类 ..................................................... 729 发送 XML-RPC 请求 ............................. 731
33

CodeIgniter 用户指南 (版本 2.1.0)

请求剖析 ..................................................... 735 创建 XML-RPC 服务器 ......................... 737 处理服务器请求 ......................................... 742 格式化反馈信息 ......................................... 750 发送出错反馈 ............................................. 754 创建你自己的客户端与服务端 ................. 755 6.10 Zip 编码类 .................................................. 759 初始化 ......................................................... 759 使用样例 ..................................................... 760 函数参考 ............................................................. 762 $this->zip->add_data()................ 762 $this->zip->add_dir() ................... 767 $this->zip->read_file()................. 768 $this->zip->read_dir().................. 770
34

CodeIgniter 用户指南 (版本 2.1.0)

$this->zip->archive() .................... 773 $this->zip->download() ............... 774 $this->zip->get_zip() ....................775 $this->zip->clear_data() ............. 776 6.11 安全类 ........................................................779 XSS 过滤...................................................779 $this->security->xss_clean() ... 781 $this->security->sanitize_filena me() .......................................................... 784 跨 站 请 求 伪 造 (Cross-site request forgery,CSRF) ...................................... 786 6.12 表单验证 .................................................... 787 概述 ..................................................................... 790 表单验证指南 ..................................................... 793
35

CodeIgniter 用户指南 (版本 2.1.0)

表单 ............................................................. 794 6.13 单元测试类 ................................................ 795 初始化单元类 ............................................. 795 运行测试: ................................................. 796 $this->unit->run( test, expected result, 'test name', 'notes'); ....... 797 生成报告 ..................................................... 801 严格模式 ..................................................... 802 启用/禁用单元测试................................... 804 Unit Test Display ............................... 805 6.14 分页类 ........................................................ 811 例子 ............................................................. 812 自定义分页 ................................................. 816 添加封装标签 ............................................. 819
36

CodeIgniter 用户指南 (版本 2.1.0)

自定义起始链接 ......................................... 820 自定义结束链接 ......................................... 821 自定义“下一页”链接 ................................. 823 自定义“上一页”链接 ................................. 824 自定义“当前页”链接 ................................. 825 自定义“数字”链接 ..................................... 826 隐藏“数字”链接 ......................................... 826 给链接添加 CSS 类 ................................. 827 6.15 购物车类 .................................................... 829 初始化购物车类 ......................................... 829 将一个项目添加到购物车 ......................... 831 将多个项目添加到购物车 ......................... 835 显示购物车 ................................................. 839 6.16 基准测试类 ................................................ 840
37

CodeIgniter 用户指南 (版本 2.1.0)

使用基准测试类 ......................................... 841 自定义你的基准测试类 ............................. 846 显示总的执行时间 ..................................... 848 显示内存消耗 ............................................. 850 6.17 加密类 ........................................................ 852 设置你的密钥 ............................................. 853 消息长度 ..................................................... 855 初始化类 ..................................................... 856 $this->encrypt->encode() .......... 857 $this->encrypt->decode() .......... 859 $this->encrypt->set_cipher(); . 861 $this->encrypt->set_mode();... 862 $this->encrypt->sha1(); .............. 863 $this->encrypt->encode_from_le
38

CodeIgniter 用户指南 (版本 2.1.0)

gacy($orig_data, $legacy_mode = MCRYPT_MODE_ECB, $key = ''); ..................................................................... 865 6.18 模板解析器类 ............................................ 870 类的初始化 ................................................. 874 $this->parser->parse() ................ 875 $this->parser->parse_string() 878 变量对 ......................................................... 878 6.19 排版类 ........................................................ 887 初始化排版类 ............................................. 887 auto_typography()........................... 888 format_characters() ....................... 892 nl2br_except_pre() ......................... 895 protect_braced_quotes ................. 896
39

CodeIgniter 用户指南 (版本 2.1.0)

6.20 配置类 ........................................................ 898 分析配置文件 ............................................. 899 加载配置文件 ............................................. 900 获取配置元素 ............................................. 904 设置一项元素 ............................................. 908 环境 ............................................................. 909 辅助函数 ..................................................... 912 $this->config->site_url();........... 912 $this->config->base_url(); ........ 912 $this->config->system_url(); ... 913 6.21 迁移类 ........................................................ 914 Create a Migration ............................ 916 Usage Example ................................... 920 Function Reference ....................................... 922
40

CodeIgniter 用户指南 (版本 2.1.0)

$this->migration->current() ..... 922 $this->migration->latest() ......... 923 $this->migration->version() ..... 923 Migration Preferences .................... 924 6.22 日历类 ........................................................ 927 初始化类 ..................................................... 927 显示一个日历 ............................................. 928 传数据到单元格 ......................................... 930 设置偏好 ..................................................... 933 显示下一月/上一月链接........................... 938 创建一个日历模板 ..................................... 941 6.23 输出类 ........................................................ 950 $this->output->set_output(); .. 952 $this->output->set_content_type
41

CodeIgniter 用户指南 (版本 2.1.0)

(); ............................................................... 953 $this->output->get_output(); .. 955 $this->output->append_output(); ..................................................................... 956 $this->output->set_header(); . 957 $this->output->set_status_head er(code, 'text'); .................................. 959 $this->output->enable_profiler(); ..................................................................... 960 $this->output->set_profiler_sect ions(); ...................................................... 961 $this->output->cache(); .............. 962 Parsing Execution Variables ....... 962 6.24 输入类 ........................................................ 964
42

CodeIgniter 用户指南 (版本 2.1.0)

安全过滤(Security Filtering) ....... 964 跨站脚本(XSS)过滤 ............................. 966 使用 POST, COOKIE, 或 SERVER 数 据 ................................................................. 967 $this->input->post() ...................... 970 $this->input->get() ........................ 972 $this->input->get_post() ............ 974 $this->input->cookie() ................. 975 $this->input->server() ................. 975 $this->input->set_cookie() ....... 976 $this->input->ip_address() ....... 981 $this->input->valid_ip($ip) ....... 981 $this->input->user_agent() ...... 983 $this->input->request_headers()
43

CodeIgniter 用户指南 (版本 2.1.0)

..................................................................... 984 $this->input->get_request_head er(); ........................................................... 985 $this->input->is_ajax_request() ..................................................................... 986 $this->input->is_cli_request() 987 6.25 图像处理类 ................................................ 988 初始化类 ..................................................... 989 处理一个图像 ............................................. 990 处理函数 ..................................................... 994 参数 ............................................................. 997 在配置文件中设置参数 ........................... 1007 $this->image_lib->resize() ...... 1008 $this->image_lib->crop() ......... 1011
44

CodeIgniter 用户指南 (版本 2.1.0)

$this->image_lib->rotate() ..... 1015 $this->image_lib->clear() ........ 1018 图像水印处理 ................................................... 1019 水印处理的两种类型 ............................... 1019 水印处理一个图像 ................................... 1020 水印处理参数 ........................................... 1023 6.26 文件上传类 .............................................. 1039 处理过程 ................................................... 1039 创建上传表单 ........................................... 1041 6.27 引用通告类 .............................................. 1041 初始化类 ................................................... 1042 发送引用通告(Trackbacks) .............. 1042 接收引用通告 ........................................... 1048 你的 Ping URL ..................................... 1049
45

CodeIgniter 用户指南 (版本 2.1.0)

创建一个引用通告表 ............................... 1050 处理一个引用通告 ................................... 1052 6.28 语言类 ...................................................... 1061 创建语言文件 ........................................... 1062 加载一个语言文件 ................................... 1065 获取一行文本 ........................................... 1066 自动加载语言 ........................................... 1067 6.29 装载器类 .................................................. 1068 $this->load->library('class_name ', $config, 'object name') ........... 1069 $this->load->view('file_name', $data, true/false) ........................... 1075 $this->load->model('Model_nam e');............................................................ 1077
46

CodeIgniter 用户指南 (版本 2.1.0)

$this->load->database('options', true/false) .......................................... 1079 $this->load->vars($array) ....... 1080 $this->load->get_var($key).... 1081 $this->load->helper('file_name') ................................................................... 1082 $this->load->file('filepath/filena me', true/false) ............................... 1082 $this->load->language('file_nam e') ............................................................. 1083 $this->load->config('file_name') ................................................................... 1084 Application "Packages" ............... 1084 Sample Package
47

"Foo

Bar"

CodeIgniter 用户指南 (版本 2.1.0)

Directory Map .................................... 1085 7. 辅助函数类库 ...................................................... 1094 7.1 Cookie 辅助函数 ........................................ 1094 set_cookie() ....................................... 1095 get_cookie() ...................................... 1095 delete_cookie() ................................ 1096 7.2 Email 辅助函数........................................... 1097 装载这个辅助函数 ................................... 1098 valid_email('email') ...................... 1099 send_email('recipient', 'subject', 'message') ........................................... 1101 7.3 HTML 辅助函数 .......................................... 1102 HTML 辅助函数 ............................................... 1102 装载辅助函数 ........................................... 1103
48

CodeIgniter 用户指南 (版本 2.1.0)

br() .......................................................... 1104 heading() ............................................. 1105 img()....................................................... 1106 link_tag() ............................................. 1111 nbs() ....................................................... 1116 ol() 和 ul()........................................ 1117 meta().................................................... 1132 doctype() ............................................. 1139 7.4 Inflector 辅助函数 ...................................... 1145 装载辅助函数 ........................................... 1145 singular() ............................................. 1146 plural() .................................................. 1146 camelize() ........................................... 1148 underscore() ...................................... 1149
49

CodeIgniter 用户指南 (版本 2.1.0)

humanize() ......................................... 1150 7.5 URL 辅助函数 ............................................. 1151 URL 辅助函数 ................................................. 1151 加载辅助函数 ........................................... 1152 site_url() .............................................. 1152 base_url()............................................ 1155 current_url()...................................... 1157 uri_string() ......................................... 1158 index_page() ..................................... 1159 anchor()................................................ 1160 anchor_popup() ............................... 1163 mailto() ................................................. 1166 safe_mailto()..................................... 1167 auto_link() .......................................... 1167
50

CodeIgniter 用户指南 (版本 2.1.0)

url_title() ............................................. 1169 prep_url() ............................................ 1172 redirect() ............................................. 1173 7.6 XML 辅助函数 ............................................ 1176 加载该辅助函数 ....................................... 1177 xml_convert('string') ................... 1177 7.7 安全辅助函数 ............................................ 1179 加载这个辅助函数 ................................... 1179 xss_clean() ......................................... 1180 sanitize_filename() ....................... 1180 do_hash() ............................................ 1181 strip_image_tags() ........................ 1182 encode_php_tags() ....................... 1183 7.8 表单辅助函数 ............................................ 1184
51

CodeIgniter 用户指南 (版本 2.1.0)

载入辅助函数 ........................................... 1184 form_open()....................................... 1185 form_open_multipart() ............... 1190 form_hidden() .................................. 1191 form_input() ...................................... 1195 form_password() ............................ 1199 form_upload() .................................. 1199 form_textarea() ............................... 1200 form_dropdown() ........................... 1200 form_multiselect() ......................... 1207 form_fieldset() ................................. 1208 form_fieldset_close() ................... 1211 form_checkbox()............................. 1213 form_radio() ...................................... 1217
52

CodeIgniter 用户指南 (版本 2.1.0)

form_submit() .................................. 1218 form_label() ....................................... 1219 form_reset() ...................................... 1222 form_button() ................................... 1222 form_close() ...................................... 1226 form_prep() ....................................... 1227 set_value() ......................................... 1230 set_select() ........................................ 1231 set_checkbox() ................................ 1233 set_radio() .......................................... 1235 7.9 表情辅助函数 ............................................ 1236 加载表情辅助函数 ................................... 1237 总体来看 ................................................... 1237 可点击的表情 ........................................... 1238
53

CodeIgniter 用户指南 (版本 2.1.0)

7.10 路径辅助函数 .......................................... 1242 载入辅助函数 ........................................... 1242 set_realpath()................................... 1243 7.11 目录辅助函数 .......................................... 1246 载入这个辅助函数 ................................... 1246 directory_map('source directory') ................................................................... 1247 7.12 排版辅助函数 .......................................... 1253 载入这个辅助函数 ................................... 1254 auto_typography()......................... 1254 nl2br_except_pre() ....................... 1255 7.13 日期辅助函数 .......................................... 1257 装载本辅助函数 ....................................... 1257 now()...................................................... 1258
54

CodeIgniter 用户指南 (版本 2.1.0)

mdate() ................................................. 1258 standard_date() .............................. 1260 local_to_gmt().................................. 1263 gmt_to_local().................................. 1264 mysql_to_unix() .............................. 1265 unix_to_human() ............................ 1266 human_to_unix() ............................ 1268 timespan() .......................................... 1269 days_in_month() ............................ 1271 timezones() ........................................ 1272 timezone_menu() ........................... 1273 时区参考 ................................................... 1276 7.14 数字辅助函数 .......................................... 1281 载入数字辅助函数 ................................... 1281
55

CodeIgniter 用户指南 (版本 2.1.0)

byte_format() ................................... 1282 7.15 数组辅助函数 .......................................... 1284 装载本辅助函数 ....................................... 1285 element() ............................................. 1285 random_element() ......................... 1287 elements() .......................................... 1290 7.16 文本辅助函数 .......................................... 1297 装载文本辅助函数 ................................... 1297 word_limiter() .................................. 1298 character_limiter() ........................ 1300 ascii_to_entities() .......................... 1301 entities_to_ascii() .......................... 1302 convert_accented_characters() ................................................................... 1303
56

CodeIgniter 用户指南 (版本 2.1.0)

word_censor() .................................. 1304 highlight_code() .............................. 1305 highlight_phrase() ......................... 1306 word_wrap() ..................................... 1308 ellipsize() ............................................. 1310 7.17 文件辅助函数 .......................................... 1312 加载 ........................................................... 1312 read_file('path') .............................. 1313 write_file('path', $data) ............. 1314 delete_files('path') ........................ 1318 get_filenames('path/to/directory /') ............................................................. 1319 get_dir_file_info('path/to/direct ory/', $top_level_only = TRUE)
57

CodeIgniter 用户指南 (版本 2.1.0)

................................................................... 1320 get_file_info('path/to/file', $file_information) .......................... 1321 get_mime_by_extension('file') ................................................................... 1322 symbolic_permissions($perms) ................................................................... 1324 octal_permissions($perms) ..... 1325 7.18 下载辅助函数 .......................................... 1326 加载这个辅助函数 ................................... 1326 force_download('filename', 'data') ................................................................... 1327 7.19 验证码辅助函数 ...................................... 1329 create_captcha($data) ................ 1330
58

CodeIgniter 用户指南 (版本 2.1.0)

7.20 语言辅助函数 .......................................... 1343 加载此辅助函数 .......................................1344 lang('language line', 'element id') ...................................................................1344 7.21 字符串辅助函数 ...................................... 1346 装载字符串辅助函数 ............................... 1346 random_string() .............................. 1347 increment_string() ........................ 1349 alternator()......................................... 1350 repeater() ............................................ 1353 reduce_double_slashes() .......... 1353 trim_slashes() .................................. 1354 reduce_multiples() ........................ 1355 quotes_to_entities() ..................... 1358
59

CodeIgniter 用户指南 (版本 2.1.0)

strip_quotes() ................................... 1359 8. 数据库类库 .......................................................... 1360 8.1 Active Record 模式 ..................................... 1360 选择数据 ........................................................... 1362 $this->db->get();........................... 1363 $this->db->get_where(); .......... 1366 $this->db->select(); ..................... 1367 $this->db->select_max(); ........ 1370 $this->db->select_min();.......... 1371 $this->db->select_avg(); .......... 1373 $this->db->select_sum();......... 1374 $this->db->from(); ....................... 1375 $this->db->join(); ......................... 1376 $this->db->where(); .................... 1379
60

CodeIgniter 用户指南 (版本 2.1.0)

$this->db->or_where(); ............ 1386 $this->db->where_in(); ............. 1387 $this->db->or_where_in(); ..... 1388 $this->db->where_not_in(); ... 1389 $this->db->or_where_not_in(); ................................................................... 1391 $this->db->like(); .......................... 1392 $this->db->or_like(); .................. 1397 $this->db->not_like();................ 1398 $this->db->or_not_like(); ........ 1399 $this->db->group_by();............. 1400 $this->db->distinct(); ................. 1402 $this->db->having(); ................... 1403 $this->db->or_having(); ........... 1406
61

CodeIgniter 用户指南 (版本 2.1.0)

$this->db->order_by();.............. 1406 $this->db->limit(); ........................ 1409 $this->db->count_all_results(); ................................................................... 1410 插入数据 ........................................................... 1412 $this->db->insert(); ..................... 1412 $this->db->insert_batch(); ...... 1416 $this->db->set(); ........................... 1420 更新数据 ........................................................... 1426 $this->db->update(); .................. 1426 $this->db->update_batch(); ... 1433 删除数据 ........................................................... 1438 $this->db->delete(); .................... 1438 $this->db->empty_table(); ......1441
62

CodeIgniter 用户指南 (版本 2.1.0)

$this->db->truncate(); ...............1442 链式方法 ...........................................................1444 Active Record 缓存 ......................................1445 $this->db->start_cache() .........1446 $this->db->stop_cache() .......... 1447 $this->db->flush_cache() ......... 1447 8.2 查询 ............................................................ 1451 $this->db->simple_query();.... 1453 Working with Database prefixes manually ........................................................................... 1454 保护标识符 ....................................................... 1455 转义查询 ........................................................... 1457 封装查询 ........................................................... 1460 8.3 查询辅助函数 ............................................ 1462
63

CodeIgniter 用户指南 (版本 2.1.0)

$this->db->affected_rows() ... 1462 $this->db->count_all(); ............. 1464 $this->db->platform() ................ 1465 $this->db->version() ................... 1466 $this->db->last_query(); .......... 1467 $this->db->insert_string(); ..... 1469 $this->db->update_string(); .. 1472 8.4 查询结果 .................................................... 1475 result() .................................................. 1476 result_array() ................................... 1481 row() ...................................................... 1483 row_array() ........................................ 1486 结果集辅助函数 ............................................... 1490 $query->num_rows() .................. 1490
64

CodeIgniter 用户指南 (版本 2.1.0)

$query->num_fields() ................. 1491 $query->free_result() ................. 1492 8.5 连接 ............................................................ 1495 自动连接 ................................................... 1495 手动连接 ................................................... 1496 连接多数据库 ........................................... 1503 重新连接 / 保持连接有效..................... 1506 手动关闭连接 ........................................... 1507 8.6 事务 ............................................................ 1508 CodeIgniter 的事务方法 ................... 1508 运行事务 ................................................... 1509 严格模式(Strict Mode)...................... 1511 管理错误信息 ........................................... 1512 禁用事务 ................................................... 1514
65

CodeIgniter 用户指南 (版本 2.1.0)

测试模式(Test Mode) ........................ 1516 手动运行事务 ........................................... 1517 8.7 数据库表数据 ............................................ 1521 $this->db->list_tables();........... 1521 $this->db->table_exists();....... 1523 8.8 数据库工具类 ............................................ 1525 初始化数据库工具类 ............................... 1526 $this->dbutil->list_databases() ................................................................... 1527 $this->dbutil->database_exists(); ................................................................... 1528 $this->dbutil->optimize_table('ta ble_name'); ........................................ 1530 $this->dbutil->repair_table('tabl
66

CodeIgniter 用户指南 (版本 2.1.0)

e_name'); ............................................ 1532 $this->dbutil->optimize_databas e(); ........................................................... 1533 $this->dbutil->csv_from_result( $db_result) ......................................... 1535 $this->dbutil->xml_from_result( $db_result) ......................................... 1538 $this->dbutil->backup() ............ 1541 8.9 数据库缓存类 ............................................ 1549 激活缓存 ................................................... 1550 缓存如何工作? ....................................... 1551 缓存能够提升站点的性能吗? ............... 1553 缓存文件如何存储? ............................... 1554 管理您的缓存文件 ................................... 1557
67

CodeIgniter 用户指南 (版本 2.1.0)

并非所有的数据库方法都带缓存 ........... 1558 函数参考 ........................................................... 1559 $this->db->cache_on() / $this ->db->cache_off() ......................... 1560 $this->db->cache_delete() ...... 1562 $this->db->cache_delete_all() ................................................................... 1564 8.10 数据库类库 .............................................. 1565 8.11 数据库例子代码 ...................................... 1568 初始化数据库类 ....................................... 1568 多结果标准查询(对象形式) ............... 1569 多结果标准查询(数组形式) ............... 1571 测试查询结果 ........................................... 1573 单结果标准查询(对象形式) ............... 1575
68

CodeIgniter 用户指南 (版本 2.1.0)

单结果标准查询(数组形式) ............... 1576 标准插入(insert) .................................. 1577 快捷查询 ................................................... 1578 快捷插入(insert) .................................. 1580 8.12 数据库配置 .............................................. 1582 8.13 数据库维护类 .......................................... 1596 初始化 ....................................................... 1597 $this->dbforge->create_databas e('db_name') ..................................... 1598 $this->dbforge->drop_database( 'db_name') .......................................... 1599 创建和删除表 ................................................... 1601 添加字段 ................................................... 1601 添加键 ....................................................... 1611
69

CodeIgniter 用户指南 (版本 2.1.0)

创建表 ....................................................... 1614 删除表 ....................................................... 1616 重命名表 ................................................... 1616 修改表 ............................................................... 1617 $this->dbforge->add_column() ................................................................... 1617 $this->dbforge->drop_column() ................................................................... 1619 $this->dbforge->modify_column() ................................................................... 1620 8.14 自定义函数调用 ...................................... 1623 8.15 字段元数据 .............................................. 1626 $this->db->list_fields().............. 1626 $this->db->field_exists() .......... 1629
70

CodeIgniter 用户指南 (版本 2.1.0)

$this->db->field_data() ............. 1631 9. 缓存适配器 .......................................................... 1637 9.1 缓存适配器 ................................................ 1637 目录 ........................................................... 1638 用法举例 ................................................... 1639 Function Reference ..................................... 1641 is_supported(driver['string']) 1642 get(id['string'])................................1644 save(id['string'], data['mixed'], ttl['int']) ...............................................1644 delete(id['string']) ......................... 1645 clean() ................................................... 1646 cache_info() ....................................... 1647 get_metadata(id['string']) ....... 1647
71

CodeIgniter 用户指南 (版本 2.1.0)

Drivers ............................................................. 1648 Alternative PHP Cache (APC) Caching.................................................. 1648 基于文件的缓存 ....................................... 1649 Memcached 缓存 ............................... 1651 Dummy Cache ................................... 1652 10. 教程 .................................................................... 1654 10.1 创建新闻条目 .......................................... 1654 Create a form ..................................... 1655 10.2 读取新闻条目 .......................................... 1656 Setting up your model .................. 1656 Display the news ............................. 1664 Routing .................................................. 1676 10.3 加载静态内容 .......................................... 1679
72

CodeIgniter 用户指南 (版本 2.1.0)

Adding logic to the controller .. 1685 Routing .................................................. 1691 10.4 结束语 ...................................................... 1695 10.5 内容提要 .................................................. 1697 11. Addenda ............................................................... 1701 11.1 找回密码 .................................................. 1701 11.2 登录 .......................................................... 1702 11.3 注册 .......................................................... 1704 11.4 变更记录 .................................................. 1704 Version 2.1.0 ...................................... 1704 版本号 2.0.3 .......................................... 1717 版本号 2.0.1 .......................................... 1724 版本号:2.0.0 ........................................ 1729 版本 1.7.2 .............................................. 1760
73

CodeIgniter 用户指南 (版本 2.1.0)

Version 1.7.1 ...................................... 1772 Version 1.7 .......................................... 1786 版本 1.6.3 .............................................. 1806 Version 1.6.2 ...................................... 1814 Version 1.6.1...................................... 1831 Version 1.6.0 ...................................... 1838 Version 1.5.4 ...................................... 1869 Version 1.5.3 ...................................... 1879 Version 1.5.2 ...................................... 1881 Version 1.5.1 ...................................... 1883 Version 1.5.0.1 ................................. 1886 Version 1.5.0 ...................................... 1887 Version 1.4.1 ...................................... 1898 Version 1.4.0 ...................................... 1905
74

CodeIgniter 用户指南 (版本 2.1.0)

Version 1.3.3 ...................................... 1916 Version 1.3.2 ...................................... 1919 Version 1.3.1 ...................................... 1921 Version 1.3 .......................................... 1925 Version 1.2 .......................................... 1931 Version Beta 1.1 .............................. 1935 Version Beta 1.0 .............................. 1939 11.5 CodeIgniter 中国 - 敏捷 PHP 框架中国官 方网站 ............................................................... 1940 (See 11.5) ................................................................... 1941 11.6 论坛 - CodeIgniter 中国开发者社区 ..... 1950 11.7 许可协议 .................................................. 1981 允许使用 ................................................... 1982 赔偿 ........................................................... 1984
75

CodeIgniter 用户指南 (版本 2.1.0)

无担保声明 ............................................... 1984 责任限制 ................................................... 1985

76

1. 首页 - CodeIgniter 用 户指南
查看原文

77

欢迎使用 CodeIgniter
CodeIgniter 是一套给 PHP 网站开发者使用的 应用程序开发框架和工具包。 它提供一套丰富的标
78

准库以及简单的接口和逻辑结构, 其目的是使开发 人员更快速地进行项目开发。使用 CodeIgniter 可以减少代码的编写量, 并将你的精力投入到项目 的创造性开发上。

CodeIgniter 是为谁准备的?
CodeIgniter 就是你所需要的,如果... 你想要一个小巧的框架。 你需要出色的性能。

?

?

79

?

你需要广泛兼容标准主机上的各种 PHP 版 本和配置。 你想要一个几乎只需 0 配置的框架。 你想要一个不需使用命令行的框架。 你想要一个不需坚守限制性编码规则的框架。 你不希望被迫学习一门模板语言 (虽然可以选 择你喜欢的模板解析器) 。 你不喜欢复杂,热爱简单。 你需要清晰、完整的文档。

?

?

?

?

?

?

80

翻译贡献者: Hex 最后修改: 2012-02-06 01:20:20 页首

2. 目录
基本信息
? ? ?

服务器要求(See 5.12) 许可协议(See 11.7) 变更记录(See 11.4)
81

?

关于 CodeIgniter(See 5.16)

安装
? ? ? ?

下载 CodeIgniter(See 4.28) 安装指导(See 4.1) 从老版本升级(See 4.27) 疑难解答(See 4.29)

介绍
?

开始(See 3.4)
82

? ? ? ? ? ?

CodeIgniter 是什么?(See 3.1) CodeIgniter 速记表(See 3.2) 支持特性(See 3.6) 应用程序流程图(See 3.7) 模型-视图-控制器(See 3.3) 架构目标(See 3.5)

教程
? ? ? ?

内容提要(See 10.5) 加载静态内容(See 10.3) 读取新闻条目(See 10.2) 创建新闻条目(See 10.1)
83

?

结束语(See 10.4)

常规主题
? ? ? ? ? ? ? ? ?

CodeIgniter URL(See 5.3) 控制器(See 5.19) 保留字(See 5.5) 视图(See 5.24) 模型(See 5.21) 辅助函数(See 5.13) 使用 CodeIgniter 类库(See 5.22) 创建你自己的类库(See 5.8) 使用 CodeIgniter 适配器(See 5.23)
84

? ? ? ? ? ? ? ? ? ? ? ? ? ?

创建适配器(See 5.9) 创建核心类(See 5.7) 钩子 - 扩展核心(See 5.15) 自动装载资源(See 5.27) 公共函数(See 5.14) URI 路由(See 5.2) 错误处理(See 5.10) 缓存(See 5.25) 调试应用程序(See 5.11) 以 CLI 方式运行(See 5.26) 管理应用程序(See 5.17) 处理多环境(See 5.6) PHP 替代语法(See 5.1) 安全(See 5.4)
85

?

开发规范(See 5.18)

附加资源
? ? ? ? ?

快速参考图(See 5.20) 搜索引擎 中文社区(See 11.6) 英文社区 社区 Wiki

类库参考

86

? ? ? ? ? ? ? ? ? ? ? ? ? ?

基准测试类(See 6.16) 日历类(See 6.22) 购物车类(See 6.15) 配置类(See 6.20) Email 类(See 6.2) 加密类(See 6.17) 文件上传类(See 6.26) 表单验证类(See 6.12) FTP 类(See 6.3) HTML 表格类(See 6.4) 图像处理类(See 6.25) 输入类(See 6.24) Javascript 类(See 6.5) 装载器类(See 6.29)
87

? ? ? ? ? ? ? ? ? ? ? ? ? ?

语言类(See 6.28) 迁移类(See 6.21) 输出类(See 6.23) 分页类(See 6.14) 安全类(See 6.11) Session 类(See 6.6) Trackback 类(See 6.27) 模板解析器类(See 6.18) 排版类(See 6.19) 单元测试类(See 6.13) URI 类(See 6.7) User-Agent 类(See 6.8) XML-RPC 类(See 6.9) Zip 编码类(See 6.10)
88

?

缓存适配器(See 9.1)

适配器参考
? ? ?

缓存类(See 6.1) 数据库类(See 8.10) Javascript 类(See 6.5)

辅助函数参考
? ?

数组辅助函数(See 7.15) CAPTCHA 辅助函数(See 7.19)
89

? ? ? ? ? ? ? ? ? ? ? ? ? ?

Cookie 辅助函数(See 7.1) 日期辅助函数(See 7.13) 目录辅助函数(See 7.11) 下载辅助函数(See 7.18) Email 辅助函数(See 7.2) 文件辅助函数(See 7.17) 表单辅助函数(See 7.8) HTML 辅助函数(See 7.3) Inflector 辅助函数(See 7.4) 语言辅助函数(See 7.20) 数字辅助函数(See 7.14) 路径辅助函数(See 7.10) 安全辅助函数(See 7.7) 表情辅助函数(See 7.9)
90

? ? ? ? ?

字符串辅助函数(See 7.21) 文本辅助函数(See 7.16) 排版辅助函数(See 7.12) URL 辅助函数(See 7.5) XML 辅助函数(See 7.6)

3. 介绍
3.1 CodeIgniter 是什么?
CodeIgniter 是什么?
91

CodeIgniter 是一个应用程序框架
CodeIgniter 是一个为用 PHP 编写网络应用程 序的人员提供的工具包。 它的目标是实现让你比从 零开始编写代码更快速地开发项目,为此,CI 提 供了一套丰富的类库来满足通常的任务需求, 并且 提供了一个简单的接口和逻辑结构来调用这些库。 CodeIgniter 可以将需要完成的任务代码量最小 化, 这样你就可以把更多的精力放到项目的开发上 了。

CodeIgniter 是免费的
92

CodeIgniter 是经过 Apache/BSD-style 开源 许可授权的,只要你愿意就可以使用它。阅读 许 可协议(See 11.7) 可获得更多的信息。

CodeIgniter 是轻量级的
真正的轻量级。 我们的核心系统只需要一些非常小 的库,这与那些需要更多资源的框架完全相反。额 外的库文件只在请求的时候加载,依需求而定,所 以核心系统是非常快而且轻的。

93

CodeIgniter 是快速的
速度非常快。你要找到一个比 CodeIgniter 表现 更优的框架应该很难吧。

CodeIgniter 使用 M-V-C 模型
CodeIgniter 使用了模型 (Model) 视图 (View) - 控制器(Controllers)的方法,这样可以更好 地使表现层和逻辑层分离。 这对项目的模板设计者 来说是非常有用的, 它最小化了模板中的程序代码
94

量。我们在 MVC 各自的页面中对此做了更多的 介绍。

CodeIgniter 生成干净的 URL
CodeIgniter 生成的 URL 非常干净而且是对搜 索引擎友好化的。不同于标准的“字符串查询”方 法,CodeIgniter 使用了 基于段 的方法:
example.com/news/article/345

注意:index.php 文件是被默认包含在 URL 中
95

的,但是可以通过更改 .htaccess 文件来改变这 个设置。

CodeIgniter 功能强大
CodeIgniter 拥有全范围的类库,可以完成大多 数通常需要的网络开发任务,包括: 读取数据库、 发送电子邮件、数据确认、保存 session 、对图 片的操作,以及支持 XML-RPC 数据传输等。

CodeIgniter 是可扩展的
96

这个系统可以非常简单的通过自定义类库、 辅助函 数来进行扩展,或者也可以通过扩展类、系统钩子 来实现。

CodeIgniter 不需要模板引擎
虽然 CodeIgniter 确实 自带了一个可选的模板 解析器程序,但不要求你必须使用模板。模板引擎 完全与本地化 PHP 代码的性能需求不符,使用模 板引擎我们要学习其语法, 这最低限度只比学 PHP 基础要容易一点点。考虑以下 PHP 代码:

97

<ul>

<?php foreach ($addressbook as $name):?>

<li><?=

<?php endforeach; ?>

</ul> 98

再来对比模板引擎所使用的伪代码:
<ul>

{foreach from=$addressbook item=

<li>{$name}</li>

{/foreach}

99

</ul>

的确,例中模板引擎的代码比较清晰,但这带来一 个性能问题,因为伪代码要先被转换成 PHP 才能 运行。我们的目标是性能最大化, 所以我们选择不 使用专用的模板引擎。

CodeIgniter 已彻底文档化
程序员都喜欢写代码讨厌写文档。当然我们也一 样,但是既然文档和代码本身一样重要,我们就要 完成它了。 况且我们代码资源极其干净而且方便注
100

释。

CodeIgniter 拥有一个友好的用户社 区
你可以在我们的 社区论坛 中看到一个成长中的 积极活跃的用户社区。

翻译贡献者: Hex, iptton, irini, IT 不倒翁, Rayne 最后修改: 2011-06-04 19:07:15 101

3.2 CodeIgniter 速记表
CodeIgniter 速记表

类库参考

102

辅助函数参考

103

翻译贡献者: Hex, lp_ci 最后修改: 2011-01-31 01:08:08

3.3 MVC
模型-视图-控制器
CodeIgniter 是基于模型-视图-控制器这一设计 模式的。MVC 是一种将应用程序的逻辑层和表现 层进行分离的方法。 在实践中, 由于表现层从 PHP 脚本中分离了出来, 所以它允许你的网页中只包含 很少的脚本。

104

?

模型 (Model) 代表你的数据结构。通常来 说,你的模型类将包含取出、插入、更新你的数据库 资料这些功能。 视图 (View) 是展示给用户的信息。一个视 图通常是一个网页,但是在 CodeIgniter 中,一个 视图也可以是一个页面片段,如页头、页尾。它还可 以是一个 RSS 页面,或任何其它类型的“页面”。 控制器 (Controller) 是模型、视图以及其 他任何处理 HTTP 请求所必须的资源之间的中介, 并 生成网页。 CodeIgniter 在 MVC 使用上非常宽松,因此模 型不是必需的。如果你不需要使用这种分离方式, 或是发觉维护模型比你想象中的复杂很多, 你可以
105

?

?

不用理会它们而创建自己的应用程序, 并最少化使 用控制器和视图。CodeIgniter 也可以和你现有 的脚本合并使用, 或者允许自行开发此系统的核心 库,可以使你以最适合你的方式工作。

翻译贡献者: bigfat, Hex, irini, IT 不倒翁, lp_ci, soyota 最后修改: 2011-05-13 13:28:47

3.4 开始
CodeIgniter 将从这里开始
任何应用软件的学习都需要花费一定的精力。 我们
106

尽了自己最大的努力使大家在学习中少走弯路, 并 且充满乐趣。 第一步就是安装(See 4.1) CodeIgniter,然后阅 读介绍部分的所有主题。 接下来按顺序阅读常规主题(请点击右上角的“目 录”或点击目录页(See 2.))里面的每一个内容。 那 里的每个内容都是承接前一个的, 并且提供了方便 实践的例子代码。 一旦你掌握了这些基础概念, 你就可以浏览类库参 考和辅助函数参考, 学习如何使用类库和辅助函数 文件了。 如果遇到了问题可以到我们的中国开发者社区寻
107

找解答, 同时, 英文的 Wiki 里面也提供了其他用 户所写的例子代码。

翻译贡献者: alsove, Hex, lp_ci 最后修改: 2011-01-20 19:22:17

3.5 目标
设计和架构目标
CodeIgniter 的目标是在最小化,最轻量级的开 发包中得到最大的执行效率、功能和灵活性。
108

为了达到这个目标, 我们在开发过程的每一步都致 力于基准测试、重构和简化工作,拒绝加入任何对 实现目标没有帮助的东西。 从技术和架构角度看,CodeIgniter 按照下列目 标创建: 动态实例化。在 CodeIgniter 中,组件的导 入和函数的执行只有在被要求的时候才执行,而不是 在全局范围。除了最小的核心资源外,不假设系统需 要任何资源,因此缺省的系统非常轻量级。被 HTTP 请求所触发的事件,以及你设计的控制器和视图将决 定它们什么时候被引用。

?

109

?

松耦合。 耦合是指一个系统的组件之间的相关 程度。越少的组件相互依赖那么这个系统的重用性和 灵活性就越好。 我们的目标是一个非常松耦合的系统。 组件专一性。 专一是指组件有一个非常小的专 注目标。在 CodeIgniter 里,为了达到最大的用途, 每个类和它的功能都是高度自治的。 CodeIgniter 是一个动态实例化,高度组件专一 性的松耦合系统。它在小巧的基础上力求做到简 单、灵活和高性能。

?

翻译贡献者: 85868405, Hex, lp_ci 最后修改: 2011-01-31 01:09:47 110

3.6 特性
CodeIgniter 特性
开发框架优秀与否与它有多少特性没有太大的关 系。你从特性中不能推断出用户的体验、不能体验 到框架设计是不是直接了当,是不是智能。特性也 不能告诉你框架代码的质量如何、性能如何、细节 处理的如何、安全性如何。判断一个框架的唯一办 法 是 在 使 用 中 了 解 它 。 安 装 (See 4.1)CodeIgniter 很简单,所以,请你使用它。 CodeIgniter 的主要特性如下: 基于 MVC 体系
111

?

?

超轻量级 对数种数据库平台的全特性支持的数据库类 Active Record 支持 表单与数据验证 安全性与 XSS 过滤 Session 管理 邮件发送类,支持附件,HTML 或文本邮件, 多协议(sendmail, SMTP 和 Mail)及更多。 图像处理类库(剪裁,缩放,旋转等)。支持 GD,ImageMagick 和 BetPBM 文件上传类
112

?

?

?

?

?

?

?

?

?

FTP 类 本地化 分页 数据加密 基准测试 全页面缓存 错误日志 应用程序评测 日历类 User-Agent 类
113

?

?

?

?

?

?

?

?

?

?

Zip 编码类 模板引擎类 Trackback 类 XML-RPC 类库 单元测试类 “搜索引擎友好”的 URL 灵活的 URI 路由 支持钩子和类扩展 大量的辅助函数

?

?

?

?

?

?

?

?

114

翻译贡献者: architectcom, Hex, iptton, IT 不倒翁 最后修改: 2011-06-04 19:01:51

3.7 应用程序流程
下图说明数据流如何贯穿整个系统:

115

1. index.php 作为前端控制器,初始化运行 CodeIgniter 所需要的基本资源。 2. Router 检查 HTTP 请求,以确定谁来处理 请求。 3. 如果缓存(Cache)文件存在, 它将绕过通常的 系统执行顺序,被直接发送给浏览器。 4. 安全(Security)。应用程序控制器 (Application Controller)装载之前,HTTP 请求和任何用户提交的数据将被过滤。 5. 控制器(Controller)装载模型、核心库、辅助 函数,以及任何处理特定请求所需的其它资 源。
116

6. 最终视图(View)渲染发送到 Web 浏览器中 的内容。如果开启缓存(Caching),视图首先 被缓存,所以将可用于以后的请求。

翻译贡献者: Hex 最后修改: 2012-02-06 01:19:24

117

4. 安装
4.1 安装指导
CodeIgniter 安装分为四个步骤: 1. 解压缩安装包。 2. 把 CodeIgniter 文件夹和里面的文件上传 到你的服务器。通常 index.php 在根目录。 3. 用任何文本编辑器打开 application/config/config.php 去设
118

置你的网站根 URL。如果你打算使用加密或 Session,请设置你的加密密钥。 4. 如果你打算使用数据库, 用任何文本编辑器打 开 application/config/database.php 去设置你的数据库参数。 如果你希望通过隐藏 CodeIgniter 文件的位置 来 增 加 安 全 性 , 你 可 以 修 改 system 和 application 目录的名字,把它改成任何你想改 的。如果已经修改了名字,你必须打开你主目录下 面 的 index.php 文 件 设 置 里 面 的 $system_path 和 $application_folder 变量,把它设成你新改的名字。
119

为了安全考虑,system 和 application 两个文 件夹应放到网站的根目录, 并拒绝浏览器的直接访 问。在默认设置下, 在每个文件夹中都有一 个.htaccess 配置文件以拒绝直接访问, 但是当把 代码部署到生产环境时最好移除他们, 因为生成环 境的 web 服务可能会改变或不支持.htaccess 的 配置. 如果你移动了以上两个文件夹,请打开主目录下的 index.php 文 件 并 编 辑 $system_path 和 $application_folder 两个变量, 最好使用绝 对 路 径 进 行 替 换 , 例 如 : '/www/MyUser/system'. One additional measure
120

to

take

in

production environments is to disable PHP error reporting and any other development-only functionality. In CodeIgniter, this can be done by setting the ENVIRONMENT constant, which is more fully described on the security page(See 5.4). 以上就是全部安装过程! 如果你刚刚接触 CodeIgniter,请阅读用户指南 的开始(See 3.4)部分,开始学习如何构造动态的 PHP 应用。让我们享受这个过程吧! 如果下载 CodeIgniter 之后,对于其中的英文注
121

释看不明白,推荐您到 CodeIgniter 中国社区学 习一下,很多朋友都从那里学到了许多知识,相信 您会得到的更多!

翻译贡献者: 1294822, djc6914, Hex, lp_ci, thestar 最后修改: 2012-02-06 00:09:59

4.2 从 1.1 升级到 1.2 最终版
Upgrading From Beta 1.1 to Final 1.2
To upgrade to Version 1.2 please replace the following directories with the new
122

versions: Note: If you have any custom developed files in these folders please make copies of them first. drivers helpers init language libraries
123

?

?

?

?

?

?

plugins scaffolding Please also replace your local copy of the user guide with the new version.

?

翻译贡献者: Hex 最后修改: 2009-02-21 23:13:51

4.3 从 1.2 升级到 1.3
Upgrading from 1.2 to 1.3
124

Note: The instructions on this page assume you are running version 1.2. If you have not upgraded to that version please do so first. Before performing an update you should take your site offline by replacing the index.php file with a static one.

Step 1: Update your CodeIgniter files
125

Replace the following directories in your "system" folder with the new versions: Note: If you have any custom developed files in these folders please make copies of them first. application/models/ codeigniter drivers helpers init
126

?

(new for 1.3)

?

(new for 1.3)

?

?

?

?

language libraries plugins scaffolding

?

?

?

Step 2: Update your error files
Version 1.3 contains two new error templates located in application/errors, and for naming consistency the other error templates have been renamed.
127

If you have not customized any of the error templates simply replace this folder: application/errors/ If you have customized your templates, rename them as follows: 404.php error.php = error_404.php = error_general.php (new) (new) error

?

?

?

?

error_db.php error_php.php

?

128

Step 3: Update your index.php file
Please open your main index.php file (located at your root). At the very bottom of the file, change this:
require_once BASEPATH.'libraries/Front_controller'.EXT;

To this:
129

require_once BASEPATH.'codeigniter/CodeIgniter'.EXT;

Step 4: Update your config.php file
Open your application/config/config.php file and add these new items:
130

/* |-----------------------------------------------| URL suffix |-----------------------------------------------| | This option allows you to add a suffix to all URLs. | For example, if a URL is this: 131

| | example.com/index.php/products/view/shoes | | You can optionally add a suffix, like ".html", | making the page appear to be of a certain type: | | example.com/index.php/products/view/shoes.html | 132

*/ $config['url_suffix'] = "";

/* |-----------------------------------------------| Enable Query Strings |-----------------------------------------------133

| | By default CodeIgniter uses search-engine and | human-friendly segment based URLs: | | example.com/who/what/where/ | | You can optionally enable standard query string | based URLs: 134

| | example.com?who=me&what;=something&where;= here | | Options are: TRUE or FALSE (boolean) | | The two other items let you set the query string "words"

135

| that will invoke your controllers and functions: | example.com/index.php?c=controller&m;=function | */ $config['enable_query_strings'] = FALSE; $config['controller_trigger'] = 'c'; $config['function_trigger'] = 'm';

136

Step

5:

Update

your

database.php file
Open your application/config/database.php file and add these new items:

$db['default']['dbprefix'] = ""; $db['default']['active_r'] = TRUE; 137

Step 6: Update your user guide
Please also replace your local copy of the user guide with the new version.

翻译贡献者: Hex 最后修改: 2009-02-21 23:15:17

4.4 从 1.3 升级到 1.3.1
Upgrading from 1.3 to 1.3.1
138

Note: The instructions on this page assume you are running version 1.3. If you have not upgraded to that version please do so first. Before performing an update you should take your site offline by replacing the index.php file with a static one.

Step 1: Update your CodeIgniter files
139

Replace the following directories in your "system" folder with the new versions: Note: If you have any custom developed files in these folders please make copies of them first. drivers init/init_unit_test.php (new for 1.3.1) language/ libraries scaffolding
140

?

?

?

?

?

Step 2: Update your user guide
Please also replace your local copy of the user guide with the new version.

翻译贡献者: Hex 最后修改: 2009-02-21 23:16:05

4.5 从 1.3.1 升级到 1.3.2
Upgrading from 1.3.1 to 1.3.2
141

Note: The instructions on this page assume you are running version 1.3.1. If you have not upgraded to that version please do so first. Before performing an update you should take your site offline by replacing the index.php file with a static one.

Step 1: Update your CodeIgniter files
142

Replace the following directories in your "system" folder with the new versions: Note: If you have any custom developed files in these folders please make copies of them first. drivers init libraries

?

?

?

143

Step 2: Update your user guide
Please also replace your local copy of the user guide with the new version.

翻译贡献者: Hex 最后修改: 2009-02-21 23:16:37

4.6 从 1.3.2 升级到 1.3.3
Upgrading from 1.3.2 to 1.3.3
144

Note: The instructions on this page assume you are running version 1.3.2. If you have not upgraded to that version please do so first. Before performing an update you should take your site offline by replacing the index.php file with a static one.

Step 1: Update your CodeIgniter files
145

Replace the following directories in your "system" folder with the new versions: Note: If you have any custom developed files in these folders please make copies of them first. codeigniter drivers helpers init libraries
146

?

?

?

?

?

Step 2: Update your Models
If you are NOT using CodeIgniter's Models(See 5.21) feature disregard this step. As of version 1.3.3, CodeIgniter does not connect automatically to your database when a model is loaded. This allows you greater flexibility in determining which databases you would like used with your models. If your application is not connecting to your database prior to a
147

model being loaded you will have to update your code. There are several options for connecting, as described here(See 5.21).

Step 3: Update your user guide
Please also replace your local copy of the user guide with the new version.

翻译贡献者: Hex 最后修改: 2009-02-21 23:17:07 148

4.7 从 1.3.3 升级到 1.4.0
Upgrading from 1.3.3 to 1.4.0
Note: The instructions on this page assume you are running version 1.3.3. If you have not upgraded to that version please do so first. Before performing an update you should take your site offline by replacing the index.php file with a static one.

149

Step 1: Update your CodeIgniter files
Replace the following directories in your "system" folder with the new versions: Note: If you have any custom developed files in these folders please make copies of them first. application/config/hooks.php
150

?

?

application/config/mimes.php codeigniter drivers helpers init language libraries scaffolding

?

?

?

?

?

?

?

Step 2: Update your config.php
151

file
Open your application/config/config.php file and add these new items:

/* |------------------------------------------------------------------------152

| Enable/Disable System Hooks |------------------------------------------------------------------------| | If you would like to use the "hooks" feature you must enable it by | setting this variable to TRUE (boolean). user guide for details. | See the

153

*/ $config['enable_hooks'] = FALSE;

/* |------------------------------------------------------------------------| Allowed URL Characters |---------------------------------------------------------154

---------------| | This lets you specify which characters are permitted within your URLs. | When someone tries to submit a URL with disallowed characters they will | get a warning message. | | As a security measure you are STRONGLY

encouraged to restrict URLs to 155

| as few characters as possible. By default only these are allowed: a-z 0-9~%.:_| | Leave blank to allow all characters -- but only if you are insane. | | DO NOT CHANGE THIS UNLESS YOU FULLY

UNDERSTAND THE REPERCUSSIONS!! |

156

*/ $config['permitted_uri_chars'] = 'a-z 0-9~%.:_-';

Step 3: Update your user guide
Please also replace your local copy of the user guide with the new version.

翻译贡献者: Hex 最后修改: 2009-02-21 23:17:37 157

4.8 从 1.4.0 升级到 1.4.1
Upgrading from 1.4.0 to 1.4.1
Note: The instructions on this page assume you are running version 1.4.0. If you have not upgraded to that version please do so first. Before performing an update you should take your site offline by replacing the index.php file with a static one.

158

Step 1: Update your CodeIgniter files
Replace the following directories in your "system" folder with the new versions: Note: If you have any custom developed files in these folders please make copies of them first. codeigniter
159

?

?

drivers helpers libraries

?

?

Step 2: Update your config.php file
Open your application/config/config.php file and add this new item:
160

/* |------------------------------------------------------------------------| Output Compression |------------------------------------------------------------------------| 161

| Enables Gzip output compression for faster page loads. When enabled, | the output class will test whether your server supports Gzip. | Even if it does, however, not all browsers support compression | so enable only if you are reasonably sure your visitors can handle it. | | VERY IMPORTANT: If you are getting a blank page 162

when compression is enabled it | means you are prematurely outputting something to your browser. It could | even be a line of whitespace at the end of one of your scripts. For | compression to work, nothing can be sent before the output buffer is called | by the output class. Do not "echo" any values with compression enabled. | 163

*/ $config['compress_output'] = FALSE;

Step 3: Rename an Autoload Item

164

Open the following application/config/autoload.php Find this array item:
$autoload['core'] = array();

file:

And rename it to this:
$autoload['libraries'] = array();

This change was made to improve clarity since some users were not sure that their own libraries could be auto-loaded.
165

Step 4: Update your user guide
Please also replace your local copy of the user guide with the new version.

翻译贡献者: Hex 最后修改: 2009-02-21 23:18:04

4.9 从 1.4.1 升级到 1.5.0
Upgrading from 1.4.1 to 1.5.0
166

Note: The instructions on this page assume you are running version 1.4.1. If you have not upgraded to that version please do so first. Before performing an update you should take your site offline by replacing the index.php file with a static one.

Step 1: Update your CodeIgniter files
167

Replace these files and directories in your "system" folder with the new versions: application/config/user_agents.p hp (new file for 1.5) application/config/smileys.php (new file for 1.5) codeigniter/ database/ (new folder for 1.5. Replaces the "drivers" folder) helpers/ language/
168

?

?

?

?

?

?

?

libraries/ scaffolding/ Note: If you have any custom developed files in these folders please make copies of them first.

?

Step

2:

Update

your

database.php file
Open
169

your

application/config/database.php and add these new items:

file

$db['default']['cache_on'] = FALSE; $db['default']['cachedir'] = '';

Step 3: Update your config.php file
170

Open your application/config/config.php file and ADD these new items:

/* |------------------------------------------------------------------------| Class Extension Prefix |------------------------------------------------------------------------171

| | This item allows you to set the filename/classname prefix when extending | native libraries. the user guide: | | http://www.codeigniter.com/user_guide/general/core _classes.html | 172 For more information please see

http://www.codeigniter.com/user_guide/general/crea ting_libraries.html | */ $config['subclass_prefix'] = 'MY_';

/* |-------------------------------------------------------------------------

173

| Rewrite PHP Short Tags |------------------------------------------------------------------------| | If your PHP installation does not have short tag support enabled CI | can rewrite the tags on-the-fly, enabling you to utilize that syntax | in your view files. (boolean) 174 Options are TRUE or FALSE

| */ $config['rewrite_short_tags'] = FALSE;

In that same file REMOVE this item:

/* |------------------------------------------------------------------------175

| Enable/Disable Error Logging |------------------------------------------------------------------------| | If you would like errors or debug messages logged set this variable to | TRUE (boolean). Note: You must set the file

permissions on the "logs" folder | such that it is writable.

176

| */ $config['log_errors'] = FALSE;

Error logging is now disabled simply by setting the threshold to zero.

Step

4:

Update

your

main

index.php file
177

If you are running a stock index.php file simply replace your version with the new one. If your index.php file has internal modifications, please add your modifications to the new file and use it.

Step 5: Update your user guide
Please also replace your local copy of the user guide with the new version.
178

翻译贡献者: Hex 最后修改: 2009-02-21 23:18:34

4.10 从 1.5.0 升级到 1.5.2
Upgrading from 1.5.0 to 1.5.2
Note: The instructions on this page assume you are running version 1.5.0 or 1.5.1. If you have not upgraded to that version please do so first.
179

Before performing an update you should take your site offline by replacing the index.php file with a static one.

Step 1: Update your CodeIgniter files
Replace these files and directories in your "system" folder with the new versions: system/helpers/download_helper. php
180

?

?

system/helpers/form_helper.php system/libraries/Table.php system/libraries/User_agent.php system/libraries/Exceptions.php system/libraries/Input.php system/libraries/Router.php system/libraries/Loader.php system/libraries/Image_lib.php system/language/english/unit_te st_lang.php
181

?

?

?

?

?

?

?

?

?

system/database/DB_active_rec.p hp system/database/drivers/mysqli/ mysqli_driver.php codeigniter/ Note: If you have any custom developed files in these folders please make copies of them first.

?

?

Step 2: Update your user guide
182

Please also replace your local copy of the user guide with the new version.

翻译贡献者: Hex 最后修改: 2009-02-21 23:18:56

4.11 从 1.5.2 升级到 1.5.3
在执行升级操作前,你应该把 index.php 替换成 一个静态文件,从而把你的站点断线。

183

第一步: 升级你的 CodeIgniter 文件
在你的"system"目录里面用新版本替换这些文件 和目录: system/database/drivers system/helpers system/libraries/Input.php system/libraries/Loader.php system/libraries/Profiler.php system/libraries/Table.php
184

?

?

?

?

?

?

注意: 如果在这些目录里面有你自己开发的文件,请 事先备份好。

第二步:升级你的用户指南
请用新的版本用户指南替换你本地的用户指南.

翻译贡献者: Hex, moonster 最后修改: 2009-02-21 23:19:20

185

4.12 从 1.5.3 升级到 1.5.4
在执行升级操作前,你应该把 index.php 替换成 一个静态文件,从而把你的站点断线。

第一步: 升级你的 CodeIgniter 文件
在你的"system"目录里面用新版本替换这些文件 和目录: system/application/config/mimes .php
186

?

?

system/codeigniter system/database system/helpers system/libraries system/plugins 注意: 如果在这些目录里面有你自己开发的文件,请 事先备份好。

?

?

?

?

第 二 步 : 增 加 charset 到 你 的
187

config.php
增 加 下 面 内 容 到

system/application/config/config.php
/* |------------------------------------------------------------------------| Default Character Set

188

|------------------------------------------------------------------------| | This determines which character set is used by default in various methods | that require a character set to be provided. | 189

*/ $config['charset'] = "UTF-8";

第三步:自动加载语言文件
如果你想自动加载任何语言文件 , 在 system/application/config/autoload.php 里 面添加下面的行:
$autoload['language'] = array(); 190

第四步: 升级你的用户指南
使用新版本替换你本地的用户指南。

翻译贡献者: Hex 最后修改: 2009-02-21 23:19:44

4.13 从 1.5.4 升级到 1.6.0
升级之前你需要断开网络,这样才能用静态文件 index.php 替换你原来的文件.
191

第一步: 更新你的 CodeIgniter 文件
在你的"system"目录下,用新版本的文件替换你 原来的文件夹和文件: system/codeigniter system/database system/helpers system/libraries system/plugins system/language
192

?

?

?

?

?

?

Note:如果在这个目录下有你自定义的文件,需要在 更新之前做一下备份.

第二步:在你的配置文件 config.php 中 添加 time_to_update
使用其他的 session 配置变量添加如下内容到 system/application/config/config.php 文 件 中

193

$config['sess_time_to_update'] = 300;

第三步: 添加 $autoload['model']
添 加 如 下 内 容 到

system/application/config/autoload.php
/* |

194

-----------------------------------------------------------------| Auto-load Model files | -----------------------------------------------------------------| Prototype: 195

| | $autoload['model'] = array('my_model'); | */

$autoload['model'] = array();

第四步: 修改你的数据库配置文件
196

database.php
把 下 面 的 变 化 添 加 到 system/application/config/database.php 这 个文件中: 在数据库配置选项的最上面添加变量 $active_group
$active_record = TRUE;

删除如下数据库配置选项:

197

$db['default']['active_r'] = TRUE;

在你的配置文件 database.php 中添加下列内容:
$db['default']['char_set'] = "utf8"; $db['default']['dbcollat'] = "utf8_general_ci";

第五步: 更新你的用户参考手册
直接用新版本的替换旧版本即可.
198

翻译贡献者: Hex, zhupeng 最后修改: 2009-09-12 15:22:35

4.14 从 1.6.0 升级到 1.6.1
在执行升级操作前, 你应该把 index.php 替换成 一个静态文件,从而把你的站点变成离线状态。

步骤 1:更新你的 CodeIgniter 文件

199

用新版本替换“system”文件夹中的这些文件和目 录: system/codeigniter system/database system/helpers system/language system/libraries 注意:如果在这些目录里面有你自己开发的文件,请 事先备份好。

?

?

?

?

?

200

步骤 2:更新你的用户指南
请用新版本替换你本地的用户指南。

翻译贡献者: analyzer, Hex 最后修改: 2009-02-21 23:23:21

4.15 从 1.6.1 升级到 1.6.2
Upgrading from 1.6.1 to 1.6.2
Before performing an update you should
201

take your site offline by replacing the index.php file with a static one.

Step 1: Update your CodeIgniter files
Replace these files and directories in your "system" folder with the new versions: system/codeigniter system/database
202

?

?

?

system/helpers system/language system/libraries Note: If you have any custom developed files in these folders please make copies of them first.

?

?

Step 2: Encryption Key
If you are using sessions,
203

open

up

system/application/config.php and verify you've set an encryption key.

Step 3: Constants File
Copy /system/application/config/constants.php to your installation, and modify if necessary.

Step 4: Mimes File
204

Replace /system/application/config/mimes.php with the dowloaded version. If you've added custom mime types, you'll need to re-add them.

Step 5: Update your user guide
Please also replace your local copy of the user guide with the new version.

205

翻译贡献者: Hex 最后修改: 2009-02-21 23:23:48

4.16 从 1.6.2 升级到 1.6.3
在执行升级操作前, 你应该把 index.php 替换成 一个静态文件,从而把你的站点变成离线状态。

步骤 1:更新你的 CodeIgniter 文件
用新版本替换“system”文件夹中的这些文件和目 录:
206

?

system/codeigniter system/database system/helpers system/language system/libraries 注意:如果在这些目录里面有你自己开发的文件,请 事先备份好。

?

?

?

?

步骤 2:更新你的用户指南
207

请用新版本替换你本地的用户指南。

翻译贡献者: Hex 最后修改: 2009-02-21 23:24:23

4.17 从 1.6.3 升级到 1.7.0
Upgrading from 1.6.3 to 1.7.0
Before performing an update you should take your site offline by replacing the index.php file with a static one.
208

Step 1: Update your CodeIgniter files
Replace these files and directories in your "system" folder with the new versions: system/codeigniter system/database system/helpers system/language
209

?

?

?

?

?

system/libraries Note: If you have any custom developed files in these folders please make copies of them first.

Step 2: Update your Session Table
If you are using the Session class in your application, AND if you are storing session
210

data to a database, you must add a new column named user_data to your session table. Here is an example of what this column might look like for MySQL:
user_data text NOT NULL

To add this column you will run a query similar to this:
ALTER TABLE `ci_sessions` ADD `user_data` text NOT NULL

211

You'll find more information regarding the new Session functionality in the Session class(See 6.6) page.

Step 3: Update your Validation Syntax
This is an optional, but recommended step, for people currently using the Validation class. CI 1.7 introduces a new Form Validation class(See 6.12), which deprecates the old Validation library. We
212

have left the old one in place so that existing applications that use it will not break, but you are encouraged to migrate to the new version as soon as possible. Please read the user guide carefully as the new library works a little differently, and has several new features.

Step 4: Update your user guide
Please replace your local copy of the user guide with the new version, including the image files.
213

翻译贡献者: Hex 最后修改: 2011-02-01 01:10:57

4.18 从 1.7.0 升级到 1.7.1
Upgrading from 1.7.0 to 1.7.1
Before performing an update you should take your site offline by replacing the index.php file with a static one.

214

Step 1: Update your CodeIgniter files
Replace these files and directories in your "system" folder with the new versions: system/codeigniter system/database system/helpers system/language
215

?

?

?

?

?

system/libraries Note: If you have any custom developed files in these folders please make copies of them first.

Step 2: Update your user guide
Please replace your local copy of the user guide with the new version, including the image files.
216

翻译贡献者: Hex 最后修改: 2009-02-22 00:32:06

4.19 从 1.7.1 升级到 1.7.2
在进行升级之前,你应该先通过替换 index.php 为静态页面的方式来使你的网站变为脱机状态。

第 1 步: 升级你的 CodeIgniter 文件

217

将 "system" 目录下的这些文件和目录替换为新 版本: system/codeigniter system/database system/helpers system/language system/libraries 说明: 如果你在这些目录下有自己编写的文件,你应 该先备份它们。

?

?

?

?

?

218

第 2 步 : 将 404 错 误 模 板 中 的 header() 移除
如果你的 404 错误模板中使用了 header() ,例 如下面显示的默认 error_404.php 模板, 请移 除那一行代码。
<?php header("HTTP/1.1 404 Not Found"); ?>

现在 show_404() 方法自身已经可以很好地处 理 404 状态头。
219

第 3 步: 升级你的用户手册
请将你的本地用户手册替换为新版本, 包括图片文 件。

翻译贡献者: Hex, yinzhili 最后修改: 2009-09-13 09:35:02

4.20 从 1.7.2 升级到 1.7.3
在进行升级之前,你应该先通过替换 index.php
220

为静态页面的方式来使你的网站变为脱机状态。

第 1 步: 升级你的 CodeIgniter 文 件
将 "system" 目录下的这些文件和目录替换为新 版本: system/codeigniter system/database system/helpers
221

?

?

?

?

system/language system/libraries 说明: 如果你在这些目录下有自己编写的文件,你应 该先备份它们。

?

第 2 步: 升级你的用户手册
请将你的本地用户手册替换为新版本, 包括图片文 件。

222

翻译贡献者: Hex 最后修改: 2010-12-07 13:20:53

4.21 从 1.7.3 升级到 2.0.0
在进行升级之前,你应该先通过替换 index.php 为静态页面的方式来使你的网站变为脱机状态。

第 1 步: 升级你的 CodeIgniter 文 件
223

替换你的“system”目录下的所有文件,除了你的 application 目录。 说明:如果你在这些目录下有自己编写的文件,你应 该先备份它们。



2 步 : 在 必 要 的 地 方 调 整

get_dir_file_info()函数
出 于 兼 容 性 的 考 虑 , 2.0.0 版 将 get_dir_file_info()函数改为无返回值,这个
224

在文件辅助函数(See 7.17)中。在 CodeIgniter 中, 出于兼容性而使用无返回值的改变是极其稀少 的,但这次我们感觉是正确的,因为它使得创建安 全的服务器运行输出变得简单。如果你需要 同时 输出子目录及其以下目录的文件信息,请更改调 用 , 设 置 第 二 个 参 数 $top_level_only 为 FALSE:

get_dir_file_info('/path/to/directory', FALSE);

第 3 步:将你的插件转换成辅助函数
225

Step 3: Convert your Plugins to Helpers
2.0.0 版删除了插件系统,因为它的功能与辅助函 数完全一样,但是它们缺乏扩展性。你需要将你的 插件的文件名从“文件名_pi.php”改为“文件名 _helper.php”, 并且移动到你的 helpers 目录, 然 后 更 改 所 有 的 调 用
$this->load->plugin('foo'); $this->load->helper('foo'); 226



第 4 步:升级存储的已加密数据

说明:如果你的应用程序没有使用加密类库,没有保 存永久加密数据, 或者在一个不支持 Mcrypt 的环境, 你可以跳过此步。 加密类库进行了数量众多的更新, 一些在加密强度 方面和一些在执行方面, 因此不可避免地导致了该 类库前期版本的加密数据再也无法被解密。 为了帮 助 转 换 , 我 们 添 加 了 一 个 新 方 法 encode_from_legacy(),它将使用原来的算 法解密数据并返回一个使用升级的算法重新加密
227

后的数据。 这样你可以轻松而快速地大量更新你的 应用程序中的旧的加密数据。 请在加密类库的文档中阅读如何使用这个方法 (See 6.17)。

第 5 步:删除对兼容性辅助函数的调用
兼容性辅助函数已经从 CodeIgniter 核心中删除。 其中的所有方法都已被 PHP 原生支持。

第 6 步:升级类的继承方式
228

现在所有的核心类都使用了“CI_”前缀。请分别升 级 模 型 和 控 制 器 为 继 承 CI_Model 和 CI_Controller。

第 7 步:升级对父类构造函数的调用
现在所有的原生 CodeIgniter 类都使用了 PHP 5 的构造函数形式“__construct()”。请更改继承 类的代码为调用“parent::__construct()”。

第 8 步: 升级你的用户手册
229

请将你的本地用户手册替换为新版本, 包括图片文 件。

翻译贡献者: bottom, Hex 最后修改: 2011-02-02 17:57:37

4.22 从 2.0.0 升级到 2.0.1
Upgrading from 2.0.0 to 2.0.1
Before performing an update you should take your site offline by replacing the index.php file with a static one.
230

Step 1: Update your CodeIgniter files
Replace all files and directories in your "system" folder and replace your index.php file. If any modifications were made to your index.php they will need to be made fresh in this new one.

231

Note: If you have any custom developed files in these folders please make copies of them first.

Step

2:

Replace

config/mimes.php
This config file has been updated to contain more mime types, please copy it to application/config/mimes.php.
232

Step 3: Check for forms posting to default controller
The default behavior for form_open() when called with no parameters used to be to post to the default controller, but it will now just leave an empty action="" meaning the form will submit to the current URL. If submitting to the default controller was the expected behavior it will need to be changed from:
233

echo

form_open();

//<form

action=""

method="post" accept-charset="gb2312">

to use either a / or base_url():
echo form_open('/'); //<form

action="http://example.com/index.php/" method="post" accept-charset="gb2312"> echo form_open(base_url()); 234 //<form

action="http://example.com/" accept-charset="gb2312">

method="post"

翻译贡献者: Hex 最后修改: 2012-02-05 16:10:28

4.23 从 2.0.1 升级到 2.0.2
Upgrading from 2.0.1 to 2.0.2
Before performing an update you should
235

take your site offline by replacing the index.php file with a static one.

Step 1: Update your CodeIgniter files
Replace all files and directories in your "system" folder and replace your index.php file. If any modifications were made to your index.php they will need to be made fresh in this new one.
236

Note: If you have any custom developed files in these folders please make copies of them first.

Step 2: Remove loading calls for the Security Library
Security has been moved to the core and is now always loaded automatically. Make sure you remove any loading calls as they
237

will result in PHP errors.

Step 3: Move MY_Security
If you are overriding or extending the Security library, you will need to move it to application/core. csrf_token_name and csrf_hash have changed to protected class properties. Please use security->get_csrf_hash() and security->get_csrf_token_name() to access those values.
238

翻译贡献者: Hex 最后修改: 2012-02-05 16:12:19

4.24 从 2.0.2 升级到 2.0.3
Upgrading from 2.0.2 to 2.0.3
Before performing an update you should take your site offline by replacing the index.php file with a static one.

239

Step 1: Update your CodeIgniter files
Replace all files and directories in your "system" folder and replace your index.php file. If any modifications were made to your index.php they will need to be made fresh in this new one.

240

Note: If you have any custom developed files in these folders please make copies of them first.

Step

2:

Update

your

main

index.php file
If you are running a stock index.php file simply replace your version with the new one.
241

If your index.php file has internal modifications, please add your modifications to the new file and use it.

Step

3:

Replace

config/user_agents.php
This config file has been updated to contain more user agent types, please copy it to application/config/user_agents.php.

242

Step 4: Change references of the EXT constant to ".php"

Note: The EXT Constant has been marked as deprecated, but has not been removed from the application. You are encouraged to make the changes sooner rather than later.

Step

5:
243

Remove

APPPATH.'third_party' autoload.php

from

Open application/autoload.php, and look for the following:
$autoload['packages'] array(APPPATH.'third_party'); =

If you have not chosen to load any additional packages, that line can be
244

changed to:
$autoload['packages'] = array();

Which should provide for nominal performance gains if not autoloading packages.

Update Tables

Sessions

Database

245

If you are using database sessions with the CI Session Library, please update your ci_sessions database table as follows:
CREATE INDEX last_activity_idx ALTER ON TABLE

ci_sessions(last_activity);

ci_sessions MODIFY user_agent VARCHAR(120);

翻译贡献者: Hex 最后修改: 2012-02-05 16:13:27 246

4.25 从 2.0.3 升级到 2.1.0
Upgrading from 2.0.3 to 2.1.0
Before performing an update you should take your site offline by replacing the index.php file with a static one.

Step 1: Update your CodeIgniter files

247

Replace all files and directories in your "system" folder and replace your index.php file. If any modifications were made to your index.php they will need to be made fresh in this new one. Note: If you have any custom developed files in these folders please make copies of them first.

Step

2:
248

Replace

config/user_agents.php
This config file has been updated to contain more user agent types, please copy it to application/config/user_agents.php.

翻译贡献者: Hex 最后修改: 2012-02-05 16:15:03

249

4.26 从 Beta 1.0 升 级 到 Beta 1.1
Upgrading From Beta 1.0 to Beta 1.1
To upgrade to Beta 1.1 please perform the following steps:

Step 1: Replace your index file
Replace your main index.php file with the
250

new index.php file. Note: If you have renamed your "system" folder you will need to edit this info in the new file.

Step 2: Relocate your config folder
This version of CodeIgniter now permits multiple sets of "applications" to all share a common set of backend files. In order to enable each application to have its own configuration values, the config directory
251

must now reside inside of your application folder, so please move it there.

Step 3: Replace directories
Replace the following directories with the new versions: drivers helpers init
252

?

?

?

?

libraries scaffolding

?

Step

4:

Add

the

calendar

language file
There is a new language file corresponding to the new calendaring class which must be added to your language folder. Add the following item to your version: language/english/calendar_lang.php
253

Step 5: Edit your config file
The original application/config/config.php file has a typo in it Open the file and look for the items related to cookies:
$conf['cookie_prefix'] = ""; $conf['cookie_domain'] = ""; $conf['cookie_path'] = "/";

254

Change the array name from $conf to $config, like this:
$config['cookie_prefix'] = ""; $config['cookie_domain'] = ""; $config['cookie_path'] = "/";

Lastly, add the following new item to the config file (and edit the option if needed):

255

/* |-----------------------------------------------| URI PROTOCOL |-----------------------------------------------| | This item determines which server global | should be used to retrieve the URI string. The 256

| default setting of "auto" works for most servers. | If your links do not seem to work, try one of | the other delicious flavors: | | 'auto' Default - auto detects | 'path_info' Uses the PATH_INFO | 'query_string' Uses the QUERY_STRING 257

*/

$config['uri_protocol'] = "auto";

翻译贡献者: Hex 最后修改: 2009-02-21 23:24:50

4.27 从老版本升级
?

从 2.0.3 升级到 2.1.0(See 4.25)
258

? ? ? ? ? ? ? ? ? ? ? ? ? ?

从 从 从 从 从 从 从 从 从 从 从 从 从 从

2.0.2 2.0.1 2.0.0 1.7.3 1.7.2 1.7.1 1.7.0 1.6.3 1.6.2 1.6.1 1.6.0 1.5.4 1.5.3 1.5.2

升级到 升级到 升级到 升级到 升级到 升级到 升级到 升级到 升级到 升级到 升级到 升级到 升级到 升级到

2.0.3(See 2.0.2(See 2.0.1(See 2.0.0(See 1.7.3(See 1.7.2(See 1.7.1(See 1.7.0(See 1.6.3(See 1.6.2(See 1.6.1(See 1.6.0(See 1.5.4(See 1.5.3(See

4.24) 4.23) 4.22) 4.21) 4.20) 4.19) 4.18) 4.17) 4.16) 4.15) 4.14) 4.13) 4.12) 4.11)

259

? ? ? ? ? ? ? ? ? ?

从 1.5.0 或 1.5.1 升级到 1.5.2(See 4.10) 从 1.4.1 升级到 1.5.0(See 4.9) 从 1.4.0 升级到 1.4.1(See 4.8) 从 1.3.3 升级到 1.4.0(See 4.7) 从 1.3.2 升级到 1.3.3(See 4.6) 从 1.3.1 升级到 1.3.2(See 4.5) 从 1.3 升级到 1.3.1(See 4.4) 从 1.2 升级到 1.3(See 4.3) 从 1.1 升级到 1.2(See 4.2) 从 Beta 1.0 升级到 Beta 1.1(See 4.26)

260

4.28 下载 CodeIgniter
CodeIgniter V 2.1.0 (当前版本) CodeIgniter V 2.0.3 CodeIgniter V 2.0.2 CodeIgniter V 2.0.1 CodeIgniter V 2.0.0 CodeIgniter V 1.7.3 CodeIgniter V 1.7.2 CodeIgniter V 1.7.1
261

?

?

?

?

?

?

?

?

?

CodeIgniter V 1.7.0 CodeIgniter V 1.6.3 CodeIgniter V 1.6.2 CodeIgniter V 1.6.1 CodeIgniter V 1.6.0 CodeIgniter V 1.5.4 CodeIgniter V 1.5.3 CodeIgniter V 1.5.2 CodeIgniter V 1.5.1 CodeIgniter V 1.4.1
262

?

?

?

?

?

?

?

?

?

?

CodeIgniter V 1.3.3 CodeIgniter V 1.3.2 CodeIgniter V 1.3.1 CodeIgniter V 1.3 CodeIgniter V 1.2 CodeIgniter V 1.1 CodeIgniter V 1.0

?

?

?

?

?

?

Git Server
Git is a distributed version control system.
263

Public Git access is available at GitHub. Please note that while every effort is made to keep this code base functional, we cannot guarantee the functionality of code taken from the tip. Beginning with version 2.0.3, stable tags are also available via GitHub, simply select the version from the Tags dropdown.

翻译贡献者: Hex, IT 不倒翁, thestar 最后修改: 2012-02-06 00:08:16

264

4.29 疑难解答
如果你发现不管你在 URL 里面写什么都只是出 现缺省页面的话,有可能是你的服务器不支持 PATH_INFO 变量,它被用来提供搜索引擎友好 的 URL 。 解 决 这 个 问 题 的 第 一 步 是 打 开 application/config/config.php 文件,查 找 URI Protocol 信息。 在那里推荐你去尝试一 些其他的设置方法。如果这些方法都无效,你就需 要让 CodeIgniter 去强行加一个问号去标记你 的 URL 。 为 了 做 到 这 点 , 打 开 你 的 application/config/config.php 文件把里 面的:
265

$config['index_page'] = "index.php";

修改成这样:
$config['index_page'] = "index.php?";

翻译贡献者: Hex 最后修改: 2009-02-21 23:10:43

266

5. 常规主题
5.1 PHP 替代语法
视图文件的 PHP 替代语法
如 果 你 不 使 用 CodeIgniter 的 模 板 引 擎 (See 6.18),则你可以在视图文件中使用原始 PHP 代 码。要使 PHP 代码达到最精简并使其更容易辨 认, 因此建议你使用 PHP 替代语法控制结构及短 标记的 echo 语句。 建议您使用 PHP 的语法为 您的控制结构和简短的输出标签。 如果你不熟悉这
267

个语法,它允许你从你的代码中消灭大括号,并且 消灭“echo”语句。

自动短标记支持
注: 如果你发现本页描述的语法在你的服务器上不 工作, 它可能是“短标记”, 并且在你的 PHP ini 文 件中禁用了。CodeIgniter 可以重写所有短标记, 让你使用这个语法即使你的服务器不支持它。 这个 特性可以在你的 config/config.php 文件中 打开($config['rewrite_short_tags']) 。

268

请注意,如果你使用这个特性,如果在你的视图文件 中发生 PHP 错误,则错误信息和行号将无法准确显 示。相反,所有的错误将显示为 eval () 的错误。

替代 Echo
正常的 echo 和 print 输出一般是这样的形式:
<?php echo $variable; ?>

使用替代语法,你能改成这样的形式:
269

<?=

替代控制结构
控制结构,像 if,for,foreach,和 while 也 可以写成简化的形式。这里是一个用 foreach 的 例子:
<ul>

270

<?php foreach ($todo as $item): ?>

<li><?=</li>

<?php endforeach; ?>

</ul>

注意,这里没有大括号。相反,结束大括号被替换 成了 endforeach。上面列出的每一个控制结构
271

也 有 相 似 的 关 闭 语 法 : endif , endfor , endforeach,和 endwhile 并且在每个结构以后注意不要使用分号(除了最后 一个),用冒号。这是很重要的! 这有另一个例子, 使用 if/elseif/else。 注意冒号:
<?php if ($username == 'sally'): ?>

<h3>Hi Sally</h3>

272

<?php elseif ($username == 'joe'): ?>

<h3>Hi Joe</h3>

<?php else: ?>

<h3>Hi unknown user</h3>

<?php endif; ?> 273

翻译贡献者: Hex, laotan 最后修改: 2012-02-05 23:05:07

5.2 URI 路由
一般来说, URI 字符串有着和它唯一对应的控制器 (controller)类/方法。URI 的各个部分是如下模 式(pattern) :
example.com/class/function/id/

然而在一些例子中,你也许想重定向这种关系来调
274

用一个不同的类/方法(class/function),而不是与 URL 一一对应(的调用). 例 如 , 你 可 能 想 使 你 的 URL 采 用 这 种 原 型 (prototype) : example.com/product/1/ example.com/product/2/ example.com/product/3/ example.com/product/4/ 一般情况下,URL 的第二个部分表示方法名,不 过 在 上 面 的 例 子 中 , 它 表 示 一 个 产 品 的 ID 。 CodeIgniter 可以实现这个功能, 让用户可以重新 定向(remap)URI 处理程序.
275

设定你自己的路由规则
路 由 规 则 定 义 在 application/config/routes.php 文 件 中 . 在此文件中,你可以看到一个名为 $route 的数 组,它可以让你定义你自己的路由规则。 定义可 以用两种方式: 通配符(wildcards) 或者 正则 表达式(Regular Expressions)

通配符

276

一个典型的通配符路由看起来是这样的:
$route['product/(:num)'] "catalog/product_lookup"; =

在一个路由中,数组的键包含着被匹配的 URI,而数 组的值包含着路由将被重定向的目的地.在上面的 例子中,如果单词“product”出现在 URL 的第一个 部分中, 而且数字(:num)出现在 URI 的第二个部 分中,"catalog"类和"product_lookup"方法将被 替代使用(即将被重定向). 你可以匹配文字的值或者使用以下两种通配符类
277

型: :num 将 匹 配 一 个 只 包 含 有 数 字 的 segment(段). :any 将匹配一个包含任何字符的 segment. 注意: 路由将会按照定义的顺序来运行.高层的路由 总是优先于低层的路由.

例子
下面是一些简单的例子:
278

$route['journals'] = "blogs";

如 果 URL 的 第 一 个 分 段 ( 类 名 ) 是 关 键 字 "journals",那么将会重定向到"blogs"类中处理.
$route['blog/joe'] = "blogs/users/34";

如果 URL 的前两个分段是"blog"和"joe", 那么将 会重定向到"blogs"类的"users"方法中处理.并且 将 ID"34"设为参数.
$route['product/(:any)'] =

279

"catalog/product_lookup";

当"product"作为 URL 中第一个分段时, 无论第 二 分 段 是 什 么 都 将 被 重 定 向 到 "catalog" 类 的 "product_lookup"方法.
$route['product/(:num)'] "catalog/product_lookup_by_id/$1"; =

当“product”作为 URL 中第一个分段时,如果第 二分段是数字,则将被重定向到“catalog”类,并 传递所匹配的内容到“product_lookup_by_id”
280

方法中。 重要提示: 不要在前面或后面加"/".

正则表达式
如果你喜欢可以使用正则表达式来自定义你的路 由规则. 任何有效的正则表达式都是被允许的, 甚至逆向引用.

281

注意: 如果你使用逆向引用请将双反斜线语法替换 为美元符语法(\\1 替换为 $1). 一个典型的正则表达式看起来像下面的样子:
$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";

上 例 中 , 类 似 于 products/shirts/123 的 URI 将换成调用 shirts 控制器类的 id_123 方法. 你也可以混合使用通配符与正则表达式.

282

系统保留的路由
系统会保留两个路由: 第一个为系统默认的路由:
$route['default_controller'] = 'welcome';

这个路由表明了当 URI 中不包含要访问的类和控 制器信息的(即只访问根目录的情况,如 http://localhost/ci)将要加载哪个控制器。上例 中,系统将加载 "welcome" 这个类 (控制器) 你 。 应该保证设置一个默认路由, 不然你的首页将会显
283

示 404 错误。 第二个为 404 页面的路由:
$route['404_override'] = '';

这个路由标识了如果请求的控制器无法访问的时 候将加载哪个控制器。 它相当于覆盖了默认的 404 错误页面(即提供了自己定义 404 页面的功能) 。 但它不会影响 show_404()这个方法, 这个方法 依 然 会 加 载 默 认 的 位 于 application/errors/error_404.php 的 error_404.php 页面。

284

重要: 保留的路由应该在所有通配符或正则表达式路 由之前定义。

翻 译 贡 献 者 : architectcom, caesarjuly, caincheung, chouqiuqiu, Hex, IT 不 倒 翁 , lijun14992560, nardo, shnwqshnwq, test_88 最后修改: 2012-02-05 23:36:59

5.3 URL
CodeIgniter URL
285

默认情况下,CodeIgniter 中的 URL 被设计成 对搜索引擎和人类友好。不同于使用标准“查询字 符串”方法的是,CodeIgniter 使用基于段的方 法:
example.com/news/article/my_article

注意:查询字符串形式的 URL 是可选的,分述如下。

URI 段

286

根据模型-视图-控制器模式,在此 URL 段一般以 如下形式表示:
example.com/class/function/ID

1. 第一段表示调用控制器类。 2. 第二段表示调用类中的函数或方法。 3. 第三及更多的段表示的是传递给控制器的参 数,如 ID 或其他各种变量。 URI 类(See 6.7)和 URL 辅助函数(See 7.5)中 的函数可以使你的 URI 更简单的工作。另外,使 用 URI 路由(See 5.2)特性可以将你的 URL 重
287

定向,以获得更大的灵活性。

删除 index.php 文件
默认情况下,index.php 文件将被包含在你的 URL 中:
example.com/index.php/news/article/my_articl e

你可以很容易的通过 .htaccess 文件来设置一些
288

简单的规则删除它。下面是一个例子,使用 “negative”方法将非指定内容进行重定向:
RewriteEngine on RewriteCond $1 !^(index\.php|images|robots\.txt) RewriteRule ^(.*)$ /index.php/$1 [L]

如果你的项目不在根目录请把上面这一句改为: RewriteRule ^(.*)$ index.php/$1 [L]
289

在上面的例子中,可以实现任何非 index.php、 images 和 robots.txt 的 HTTP 请求都被指向 index.php。

添加 URL 后缀
通过设置 config/config.php 文件, 你可以为 CodeIgniter 生成的 URL 添加一个指定的文件 后缀。举例来说,如果 URL 是这样的:
example.com/index.php/products/view/shoes

290

你可以随意添加一个后缀,例如 .html,使其显 示为:
example.com/index.php/products/view/shoes.ht ml

(icebird 注:英文中由于参数可直接看懂其含义, 并未说明应修改哪个参数,在这里应修改 $config['url_suffix']这个参数。)

启用查询字符串
291

在一些情况下你需要在 URL 中使用查询字符串:
index.php?c=

CodeIgniter 支持这个功能是可选的,可以在 application/config/config.php 文件中进 行设置。 如果你打开 config 文件可以看到如下内 容:
$config['enable_query_strings'] = FALSE; $config['controller_trigger'] = 'c'; //控制器名

292

$config['function_trigger'] = 'm'; //方法名 $config['directory_trigger']='d'; //若控制器在子 目录下,URL 中需带有这个参数,指定控制器所在子 目录名称

如 果 你 将 enable_query_strings 更 改 为 TRUE ,那么这个功能就被激活了。此时,你就可 以通过关键字来调用需要的控制器和方法了:
index.php?c= 293

请注意:如果你使用查询字符串,那么就必须使用自 己建立的 URL ,而且不能使用 URL 辅助函数(或 是其他生成 URL 的辅助函数,例如表单辅助函数), 因为这些都是根据分段 URL 设计的。

翻译贡献者: Hex, icebird, longjianghu, lp_ci, zhupeng, 笼中 最后修改: 2012-02-07 18:29:50

294

5.4 安全
本页描述了一些关于 Web 安全的“最佳实践”, 并 详细说明了 CodeIgniter 的内部安全特性。

URI 安全
CodeIgniter 严 格 限 制 URI 中 所 能 包 含 的 字 符, 以此帮助你设计的程序减少被恶意数据入侵的 可能。URI 一般只包含下列内容: 字母和数字(Alpha-numeric text)
295

?

?

波浪符(Tilde) ~ : 句号(Period) . : 冒号(Colon) : : 下划线(Underscore) _ : 破折号(Dash) :

?

?

?

?

Register_globals
系统初始化期间所有的全局变量都被 unset,除 了那些在 $_GET、$_POST 和 $_COOKIE 数 组中的数据。实际上 unsetting 实例程序的作用
296

与 register_globals = off 相同。

error_reporting
在生产环境中,往往有必要通过设置内部的 error_reporting 值为 0 来禁用 PHP 错误报告。 这可以防止可能含有敏感信息的原始 PHP 错误报 告输出。 在 index.php 设 置 CodeIgniter 的 ENVIRONMENT 常量为 'production' 将会 关闭这些错误(报告)。在开发模式下,推荐设为 'development'。 更多关于各环境间区别的信
297

息可以在处理多环境(See 5.6)一章找到。

magic_quotes_runtime
在系统初始化期间 magic_quotes_runtime 指 令被关闭以便在数据库检索数据时不必去掉反斜 线。

最佳实践
在接收任何数据到你的程序之前, 不管是表单提交 的 POST 数据、COOKIE 数据、URI 数据、
298

XML-RPC 数据、还是 SERVER 数组中的数据, 我们都推荐你实践下面的三个步骤: 1. 过滤不良数据. 2. 验证数据以确保符合正确的类型, 长度, 大 小等. (有时这一步骤也可取代第一步骤) 3. 在提交数据到你的数据库之前将其转换. CodeIgniter 提供了下列函数以辅助这个过程:

?

XSS 过滤

299

CodeIgniter 带有一个跨站脚本过滤器. 这个过滤器 会查找那些用通常手段嵌入到你数据中恶意的 Javascript,或其它一些试图欺骗 cookie 类型的或者 做其它恶意事情的代码. XSS Filter 的详细描述在 这 里(See 6.11).

?

验证数据
CodeIgniter 有一个表单验证类(See 6.12)用来帮 助验证、过滤和预处理数据。

300

?

插入数据库之前转义所有数据
不要插入未转义的信息到你的数据库中。要了解更多 信息请参阅查询(See 8.2)章节。

翻译贡献者: Hex, IT 不倒翁, lishen2, shnwqshnwq, xwjie 最后修改: 2012-02-11 00:35:08

5.5 保留字
为了便于编程, CodeIgniter 使用了一系列的函数
301

和名称来完成操作。所以,有些名称不能被程序员 使用。下面是不能被程序员使用的保留字列表。 控制器名称 因为你的控制器类将继承主程序控制器, 所以你的 函数命名一定不能和主程序控制器类中的函数名 相同,否则你的局部函数将会覆盖他们。下面列出 了已经保留的名称, 请不要将你的控制器命名为这 些: Controller CI_Base _ci_initialize
302

?

?

?

?

Default index 函数 is_really_writable() load_class() get_config() config_item() show_error() show_404()
303

?

?

?

?

?

?

?

?

log_message() _exception_handler() get_instance() 变量 $config $mimes $lang 常量 ENVIRONMENT
304

?

?

?

?

?

?

?

EXT FCPATH SELF BASEPATH APPPATH CI_VERSION FILE_READ_MODE FILE_WRITE_MODE DIR_READ_MODE DIR_WRITE_MODE
305

?

?

?

?

?

?

?

?

?

?

FOPEN_READ FOPEN_READ_WRITE FOPEN_WRITE_CREATE_DESTRUCTIVE FOPEN_READ_WRITE_CREATE_DESTR UCTIVE FOPEN_WRITE_CREATE FOPEN_READ_WRITE_CREATE FOPEN_WRITE_CREATE_STRICT FOPEN_READ_WRITE_CREATE_STRICT

?

?

?

?

?

?

?

306

翻译贡献者: Hex, lishen2 最后修改: 2012-02-05 23:33:59

5.6 处理多环境
开发者通常希望就开发环境或者生产环境的不同 而有不同的系统行为(响应)。 例如,输出冗长的 错误对开发过程很有用, 但是当项目上线时这可能 会造成一些安全问题。

ENVIRONMENT 常量
307

默 认 情 况 下 CodeIgniter 把 环 境 常 量 设 置 为 'development'. 在 index.php 文件的顶部, 你会看到:
define('ENVIRONMENT', 'development');

除了影响一些基本框架行为外(查看下一章节) , 你还可以在开发过程中用这个常量来区分正在运 行的是哪个环境。

对默认框架行为的影响

308

CodeIgniter 系 统 有 些 地 方 使 用 了 ENVIRONMENT 常量。 在这一章节会说明默 认情况下环境常量对框架行为的影响。 错误报告 设 置 ENVIRONMENT 常 量 为 'development' 值将会允许所有 PHP 错误报告 都输出到浏览器。 相反的,设置常量为 'production' 将会禁止所有错误报告的输出。 在产品中禁用错误报告是一个 不错的安全措施 (See 5.4)。 配置文件
309

可选的,你可以让 CodeIgniter 加载特定环境的 配置文件。 这可能会对管理如在多环境使用不同 API 密钥这样的事情很有用。 这在文档配置类“环 境”一节有详细的说明。

翻译贡献者: Hex, xwjie 最后修改: 2012-02-11 00:32:10

5.7 创建核心系统类
每次 CodeIgniter 运行时都有很多基础类作为核 心框架的一部分被自动初始化.但你也可以使用经
310

过你修改的类来替换甚至扩展这些原始的核心系 统类. 大多数用户一般不会有这种需求,但对于那些想较 大幅度的改变 CodeIgniter 的人来说,我们依然 提供了替换和扩展核心系统类的选择. 注意: 改变系统核心类会产生很大影响,所以在你做 之前必须清楚地知道自己正在做什么.

系统类清单

311

以下是系统核心文件的清单,它们在每次 CodeIgniter 启动时被调用: Benchmark Config Controller Exceptions Hooks Input Language Loader
312

?

?

?

?

?

?

?

?

?

Log Output Router URI Utf8

?

?

?

?

替换核心类
要使用你自己的系统类替换默认类只需简单的将 你 自 己 的 .php 文 件 放 入 本 地 文 件 夹 application/core
313

application/core/some-class.php

如果这个文件夹不存在你可以自己创建一个. 只要你自定义的文件名与默认的完全一样,它就会 自动替换原有的类. 要注意的是你自定义的类必须以 CI 作为前缀,例 如你自己建立了 Input.php 类的名字必须是:
class CI_Input {

} 314

扩展核心类
如果你需要在现有类库中加入一两个新的功能,那 就完全不必要替换整个类库文件.你只需简单地扩 展(继承)现有的类,扩展一个类就像在类中增加一 些例外: 扩展的类必须申明由母类扩展而来. 新扩展的类所在的文件必须以 MY_ 为前缀 (这个选项是可配置的,下面有说明). 例如,要扩展原有的 Input 类,你应该新建一个文 件名为 application/core/MY_Input.php,
315

?

?

并按如下声明你的类:
class MY_Input extends CI_Input {

}

注意:如果你需要在类中使用构造函数,你必须在 构造函数中显式继承母类构造函数:
class MY_Input extends CI_Input {

316

function __construct() { parent::__construct(); } }

Tip: 所有在你的新类中定义的函数如果与母类中函 数的命名完全一样,这些函数就能取代母类中原有的

317

函数 (这也被称为"方法覆盖").这允许你在本质上改 变 CodeIgniter 的核心. 如果你扩展了控制器核心类, 那么也要在你的应用 程序控制器的构造函数中使用这个新类。
class Welcome extends MY_Controller {

function __construct() {

318

parent::__construct(); }

function index() { $this->load->view('welcome_message'); }

319

}

自定义前缀 要 设 定 你 自 己 的 子 类 前 缀 , 请 打 开 application/config/config.php 文件并找 到这一项:
$config['subclass_prefix'] = 'MY_';

请注意所有原始 CodeIgniter 类库以 CI_ 作为 前缀,所以请勿以 CI_作为你自己的前缀.所有的扩 展核心类必须放到 core 目录中!
320

翻译贡献者: Hex, longbill, qixingyue, skey, thinksand 最后修改: 2011-07-15 22:26:35

5.8 创建你自己的类库
查看原文

创建类库
当我们使用术语"类库"时,我们一般指的是位于 libraries 文件夹中的类,它们在 wiki 的"类库参
321

考"这个板块被讨论.在当前这个话题中,我们将讨 论如何在 application/libraries 文件夹中建 立你自己的类库,并使它们与全框架的资源维持分 离. 作为一个额外的功能,当你需要在原始类中简单地 添 加 一 些 功 能 时 ,CodeIgniter 能 使 你 的 类 库 extend 自 原 始 类 . 你 甚 至 可 以 通 过 在 application/libraries 文件夹下安放同名类库 文件的方法来完全替换原始类. 总之: 你可以创建全新的类库. 你可以扩展原始类库.
322

?

?

?

你可以替换原始类库. 以下页面将深入介绍这三个概念. 注意: 除了数据库类无法被扩展或替换,剩余其他类 均可。

建立你的类库文件
你 的 类 库 文 件 必 须 保 存 在 application/libraries 文 件 夹 ,CodeIgniter 将在这个文件夹中寻找并初始化它们.
323

命名约定
文件名首字母大写. 例如: Myclass.php 类声明首字母大写. 例如: class Myclass 类的名字和文件名应符合.

?

?

?

类文件
所有的类应有基础原型(注意,这里我们以 Someclass 这个名字为例):
324

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Someclass {

public function some_function() { } 325

}

/* End of file Someclass.php */

使用你自己的类
在所有的 Controller(See 5.19) 函数中,你可以 用以下的标准方式初始化你的类:

326

$this->load->library('someclass');

当 someclass 是文件名时,不用加上".php"扩展 名.这里名字不分大小写. 一旦你自定义的类加载完毕,你可以通过以下方式 调用类,注意使用 小写 的名字:

$this->someclass->some_function(); // 对象

的实例名永远都是小写的

327

在初始化自定义类时传递参数
当初始化类库时, 你可以通过第二个参数动态的传 递数组到类的构造函数中去:
$params = array('type' => 'large', 'color' => 'red');

$this->load->library('Someclass', $params);

328

当你使用这个特性时,你必须为类的构造函数加上 参数:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Someclass {

public function __construct($params)

329

{ // Do something with $params } }

?>

330

你也可以传递存于配置文件中的参数.你只需简单的 建立一个与 类文件名相同的 config 文件,并保存在 application/config/ 文件夹中.注意当你通过上 文所述的方式动态传递参数时,config 文件中的选项 将不起作用.

在 你 自 定 义 的 类 库 中 初 始 化 CodeIgniter 资源
要你自定义的类库中访问 CodeIgniter 的原始资
331

源,你必须使用 get_instance() 函数.这个函 数返回一个 CodeIgniter super object. 一般来说在你的控制器函数中你可以通过 $this 调用任何可用的 CodeIgniter 函数:
$this->load->helper('url'); $this->load->library('session'); $this->config->item('base_url'); //etc.

332

$this, 只直接作用在你自己的控制器,模型和视 图中.当你在自定义类中想使用 CodeIgniter 原始 类时,你可以这样做: 首先,定义 CodeIgniter 对象赋给一个变量:
$CI =& get_instance();

一旦定义某个对象为一个变量,你就可以使用那个 变量名 取代 $this:
$CI =& get_instance();

333

$CI->load->helper('url'); $CI->load->library('session'); $CI->config->item('base_url'); //etc.

注意: 你将注意到 get_instance()这个函数通过被 引用的方式被传递: $CI =& get_instance();
334

这十分重要. 通过引用的方式赋给变量将使用原始
的 CodeIgniter 对象,而不是创建一个副本。

用你自己的类替换原始类
简单的将你自己的类命名为与原始类一样就能使 CodeIgniter 使用这个新类. 要使用这个特性, 文 件名与类声明必须与原始类完全一致。例如,要替 换原始的 Email 类库。你必须创建一个文件 application/libraries/Email.php, 并按如 下方式声明类:
335

class CI_Email {

}

注意大多数原始类以 CI_为前缀. 你可以只用标准载入函数来载入你自己的类:

$this->load->library('email');

336

注意: 这个时候 Database 无法替换为你自定义的 类.

扩展现有类
如果你需要在现有类库中加入一两个新的功能,那 就完全不必要替换整个类库文件.你只需简单地扩 展(继承)现有的类,扩展一个类就像在类中增加一 些例外: 扩展的类必须申明由母类扩展而来.
337

?

?

新扩展的类所在的文件必须以 MY_ 为前缀 (这个选项是可配置的,下面有说明). 例如,要扩展原始类 Email 类你要建立文件 application/libraries/MY_Email.php, 并按如下方式在文件中声明:
class MY_Email extends CI_Email {

}

注意:如果你需要在类中使用构造函数,你必须在 构造函数中显式继承母类构造函数:
338

class MY_Email extends CI_Email {

public function __construct() { parent::__construct(); } }

339

载入你的子类 要载入扩展子类,你应该使用标准字符名. 请不要 使用前缀. 例如,要载入上文说过的 email 扩展子 类,你应该这样写:

$this->load->library('email');

扩展子类一旦被载入, 就能像一般的类一样使用它 们. Email 类中的所有函数就能被调用:

$this->email->some_function(); 340

设定自定义前缀 要 设 定 你 自 己 的 子 类 前 缀 , 请 打 开 application/config/config.php 文件并找 到这一项:
$config['subclass_prefix'] = 'MY_';

注意所有原始 CodeIgniter 类库以 CI_ 作为前 缀,所以请勿以 CI_作为你自己的前缀.

翻译贡献者: benfeng, billycui, Deloz, Hex, IT 不倒翁, shishirui, soyota, thinksand, walkbird 341

最后修改: 2012-02-05 23:23:26 上一个主题: 使用 CodeIgniter 程序库(See 5.22) · 页 首 · 用户指南首页(See 1.) · 下一个主题: 使用 CodeIgniter 适配器(See 5.23)

5.9 创建适配器
适配器目录和文件结构
适配器目录和文件结构布局的例子: /application/libraries/Driver_name Driver_name.php
342

?

drivers Driver_name_subclass_1 .php Driver_name_subclass_2 .php Driver_name_subclass_3 .php 注意: 为了在大小写敏感的文件系统上维持兼容性, 这个 Driver_name 目录必须使用 ucfirst() 函 数处理。

?

?

?

343

翻 译 贡 献 者 : Hex, hk_yuhe, IT 不 倒 翁 , mahone, qixingyue 最后修改: 2011-07-30 08:07:54

5.10 错误处理
在你的程序里使用以下的函数, CodeIgniter 将允 许你建立自己的错误报告。另外,他有一个错误记 录类能够将错误和调试信息保存为文本文档。 注意: 在默认的情况下, CodeIgniter 会显示所有的 PHP 错误. 但是当你开发程序结束时, 你可能想要改 变这个情况. 你会发现在 index.php 文件顶端有这个
344

函数 error_reporting(),通过它可以进行对错误 的设置。 即使你关闭了错误报告,当有错误发生时, 错误记录也不会停止。 不像大多数系统, CodeIgniter 的错误报告函数是 一个简单的程序接口,可以在整个应用程序里使 用。 不用考虑类或者是函数的范围,这种办法可 以直接触发错误通知。 可以使用以下函数来产生错误消息:

show_error(' 消 息 '
345

[,

int

$status_code = 500 ] [, string $heading = 'An Error Was

Encountered'])
这个函数将会使用以下错误模版来显示错误消息: application/errors/error_general.php 可选参数 $status_code 决定在显示错误的同时 将会发送哪种 HTTP 状态代码。 可选参数 $heading 决定错误模版 h1 标签内容。
346

show_404('页面' [, 'log_error'])
这个函数将会使用以下错误模版来显示 404 错 误信息: application/errors/error_404.php 传递给该函数的字符串代表的是找不到的文件路 径。注意 CodeIgniter 会在找不到目标控制器情 况下,自动显示 404 消息。 CodeIgniter 自动记录任何 show_404() 函数 调用。设置第二个可选的参数为 FALSE 将跳过记 录
347

log_message('级别', '消息')
这个函数可以让你将消息写入记录文件中。 你必须 在第一个参数中选择三个“级别“中的任何一个, 指明它是那一类消息(调试 debug, 错误 error, 信息 info)。 第二个参数是消息本身。 例如:
if ($some_var == "") { log_message('error', 'Some variable did not

348

contain a value.'); } else { log_message('debug', correctly set'); } 349 'Some variable was

log_message('info', 'The purpose of some variable is to provide some value.');

有三种不同类型的消息: 1. 错误类型的消息。 这种是真正的错误消息. 例如 PHP 错误或者用户错误。 2. 调试类型的消息。 这种是用来帮助调试的消 息。 例如, 如果当一个类被初始化时,你可 以将这个初始化纪录下来,然后用于调试。

350

3. 信息类型的消息。 这种是最低优先级别的消 息,它只是简单的提供了关于运行的一些信 息。 CodeIgniter 不会自动产生任何信息类 型的消息, 但是你可能会在你的程序里使用它 注意: 确保"logs" 文件夹是可写的,才能准确地将消 息写入记录文件中。In addition, you must set the "threshold" for logging in application/config/config.php. 例如通过设 置“threshold“, 你可以只记录错误类型的消息, 而不 用记录其他两种。如果你将“threshold“设为 0,记录 就会被禁止。

351

翻译贡献者: aykirk, borisauschina, crgod, Hex, IT 不倒 翁, tyronecai, walkbird, xjflyttp, 笼中 最后修改: 2012-02-05 23:29:48

5.11 调试你的应用程序
调试你的应用程序
该分析器将在页面下方显示基准测试结果, 运行过 的 SQL 语句,以及 $_POST 数据。这些信息有 助于开发过程中的调试和优化。

352

初始化类

注意: 此分析器无须手动初始化.如果已按照下面的 方式激活,他将被输出类(See 6.23)自动装载。

激活分析器
在控制器(See 5.19)中设置以下方法以激活该分 析器

353

$this->output->enable_profiler(TRUE);

分析器激活后将产生一个报告并插入您的页面底 部 使用以下方法禁用该分析器:
$this->output->enable_profiler(FALSE);

设定基准点
为了让该分析器编译和显示你的测试数据, 你必须
354

使用特定的语法命名基准点。 请在基准测试类(See 6.16)部分阅读关于设置基 准点的资料。

启用和禁用分析数据中的字段
分析数据中的每个字段可通过设置相应的控制变 量 TRUE or FALSE 来启用和禁用. 其中的一个 方 法 是 : 你 可 以 在 application/config/profiler.php 配 置 文 件里设置整个程序的全局默认值.

355

$config['config'] $config['queries']

= FALSE; = FALSE;

另一种方法是:你可以在控制器中通过调用 set_profiler_sections() 来覆盖全局设置和 默认设置, 详细可见: Output class(See 6.23):
$sections = array( 'config' => TRUE, 'queries' => TRUE 356

);

$this->output->set_profiler_sections($sections);

下表列出了可用的分析器数据字段和用来访问这 些字段的 key。
Key benchmarks config Description 在各个计时点花费的 时间以及总时间 CodeIgniter 配置变 357 Default TRUE TRUE

量 被调用的 method 及 其所属的控制器类 在 request 中传递的 所有 GET 参数 本 次 请 求 的 HTTP 头 本次请求消耗的内存 (byte 为单位) 在 request 中传递的 358

controller_info

TRUE

get

TRUE

http_headers

TRUE

memory_usage post

TRUE TRUE

所有 POST 参数 列出执行的数据库操 queries 作语句及其消耗的时 间 uri_string 本次请求的 URI The query_toggle_count which number the of 25 TRUE TRUE

queries

after query

block will default to hidden.

359

翻译贡献者: amos, chouqiuqiu, Hex, teamoustar 最后修改: 2012-02-05 23:32:42

5.12 服务器要求
PHP 版本 5.1.6 或更新的版本。 大多数 Web 应用程序需要数据库。 当前支持 的数据库为:MySQL (4.1+), MySQLi, MS SQL, Postgres, Oracle, SQLite 和 ODBC。

?

?

翻译贡献者: Hex, nameleq, wuzeaibaozi 最后修改: 2011-05-08 19:29:40 360

5.13 辅助函数
辅助函数,顾名思义,是帮助我们完成特定任务的 函数。每个辅助函数文件仅仅是一些函数的集合。 例如,URL Helpers 可以帮助我们创建链接, Form Helpers 可以帮助我们创建表单,Text Helpers 提 供 一 系 列 的 格 式 化 输 出 方 式 , Cookie Helpers 能 帮 助 我 们 设 置 和 读 取 COOKIE, File Helpers 能帮助我们处理文件, 等等。 跟其他部分不同的是, 辅助函数不是用类的方式来 实现的。 它们仅仅是一些简单的过程处理函数。 每 个辅助函数处理一个特定的任务, 并且不必依靠其
361

他函数。 CodeIgniter 默认是没有载入辅助函数文件的, 所以如果你想用辅助函数,就必须先载入它。 一 旦 被 载 入 , 辅 助 函 数 将 全 局 可 用 (globally available), 你可以在 controller(See 5.19) 和 views(See 5.24) 中使用它们。 辅 助 函 数 文 件 一 般 保 存 在 system/helpers 或 application/helpers 文 件 夹 中 。 CodeIgniter 将 会 先 在 application/helpers 寻找对应的辅助函数文 件, 如果目录不存在或者目录下没有对应的辅助 函数文件,CI 才会载入 system/helpers 下 的辅助函数文件。
362

载入辅助函数
载入辅助函数是非常简单的:
$this->load->helper('name');

name 是辅助函数文件的名字(不带.php 后缀 和"helper" 部分)。 例如, 要载入文件名为 url_helper.php 的 URL Helper,你将会用到下面的语句:
$this->load->helper('url'); 363

辅助函数可以在你的控制器(controller)的任何地 方被载入,甚至可以在视图(View)文件中被载入 (我们并不建议你这么做)。 请在使用辅助函数之 前载入他们。 你可以在你的控制器构造函数中载入 它们,以便辅助函数能自动在其他函数之前被载 入。你也可以在要用到辅助函数的地方当场载入。 注意: 辅助函数载入函数并不返回值,所以不要尝试 将它付给一个变量,直接像这样用就可以了。

载入多个辅助函数
364

如果你想一次载入多个辅助函数,你可以这样做:
$this->load->helper( array('helper1', 'helper2', 'helper3') );

自动载入辅助函数
如果你想要的话, CodeIgniter 可以自动为你载入 辅 助 函 数 。 你 可 以 通 过 打 开 application/config/autoload.php , 并往 自动载入数组(autoload array)中增加辅助函数
365

来实现。

使用辅助函数
一旦你载入了想要用到辅助函数文件, 你就可以用 标准的函数调用方法来使用里面的函数。 例如,要使用 anchor() 函数来建立一个链接, 在视图(View)文件里面你可以这样做:
<?php echo anchor('blog/comments', 'Click

366

Here');?>

"Click Here" 是链接的名字, "blog/comments" 是链接的 URI。

"扩展" Helpers
你如果想 "扩展"一个原有的 Helpers,, 可以在你 的 application/helpers/ 目 录下 创 建 一个 新的 helper,新的 helper 的名字是在被“扩展” 的 Helper 的名字开头多加一个 MY_ (这是可以 配置的. 见下.).
367

如果你想做的只是在原有的 helper 中添加一些新 的功能,比如,添加一两个新的方法,或者是修改 一个方法;就不值得重写自己的 helper。在这种 情况下,最好是“扩展”已有的 helper。“扩展”一 词用在这里不是很恰当,因为 Helper 的方法是 procedural 和 discrete 的,在传统的语言环境 中无法被“扩展”,不过在 CodeIgniter 中,你可 以添加或修改 helper 的方法。 例如, 扩展一个本地已有的 Array Helper 你应 该 建 立 一 个 文 件 : application/helpers/MY_array_helper .php, 并添加或重写(override)其中的一些方 法:
368

// any_in_array() is not in the Array Helper, so it defines a new function function any_in_array($needle, $haystack) { $needle = (is_array($needle)) ? $needle : array($needle);

369

foreach ($needle as $item) { if (in_array($item, $haystack)) { return TRUE; } } 370

return FALSE; }

// random_element() is included in Array Helper, so it overrides the native function function random_element($array) { 371

shuffle($array); return array_pop($array); }

设定你自己的前缀(Prefix) 用于"扩展" helper 而加上前缀的文件同样也是 对库和核心类的扩展.为了设置你自定义的前缀, 请 打 开 application/config/config.php 文件,然后找到如下的条目:

372

$config['subclass_prefix'] = 'MY_';

请注意:由于所有 CodeIgniter 自带的库都被冠 以 CI_ 这样的前缀命名,所以请不要使用 CI_来 自定义前缀.

现在可以做什么?
在目录(See 2.)里面有所有辅助函数的列表, 你可 以打开每个文件看看他们都能做些什么。 不过目前还没有想到更好的方法让我们如何记住
373

这些辅助函数! 要不编辑个快速查询手册??如果 你有更好的方法请告诉我!

翻译贡献者: architectcom, borisauschina, Hex, lishen2, longbill, ripen, sheshi37c, shishirui, Xwoder 最后修改: 2011-09-16 22:34:58

374

5.14 公共函数
注:本条为本人添加。公共函数位于 system/core/Common.php 文件中,大家可以在 这里定义自己的公共函数。--IT 不倒翁 CodeIgniter 使用了一些全局定义的函数来完成 操作,在任何情况下你都能够使用这些函数。使用 他们不需要载入任何类库或辅助函数。

is_php('version_number')
375

is_php() 判断正在使用的 PHP 的版本号是否高 于你所提供的 version_number 。
if (is_php('5.3.0')) { $str = quoted_printable_encode($str); }

如果已安装的 PHP 版本号等于或高于你所提供的 版本号,本函数将返回布尔值 TRUE。如果安装 的 PHP 版本号低于你所提供的那个版本号,本函
376

数将返回 FALSE。

is_really_writable('path/to/file ')
在 Windows 平台,is_writable()函数在实际没 有文件写权限时也返回真。那是因为,只有文件有 只读属性时,操作系统才向 PHP 报告为假。这个 函数依靠对文件的先行写入来判断是否真的具有 写权限。 通常情况下,只有在这个信息不可靠的 平台上才推荐使用。
377

if (is_really_writable('file.txt')) { echo "I could write to this if I wanted to"; } else { echo "File is not writable"; 378

}

config_item('item_key')
尽管使用 config_item()函数能够取得单个配置 信息,但是配置类(See 6.20)是访问这些信息的 优选方式。更多信息请见类库参考。

show_error('message'),

379

show_404('page'), log_message('level', 'message')
这些函数在错误处理(See 5.10)中描述。

set_status_header(code, 'text');
380

允许你手动设置服务器状态头(header)。例如:
set_status_header(401); // 将 header 设置为: Unauthorized

单击这里 查看全部的 header 列表。

remove_invisible_characters($ str)

381

这个函数能防止在 ASCII 字符之间插入空字符, 如 Java\0script.

html_escape($mixed)
利用此功能可以方便的使用 htmlspecialchars() 函数。它接受字符串和数组。有助于防止跨站脚本 攻击(XSS) 。

翻译贡献者: Hex, IT 不倒翁, lishen2, walkbird, yinzhili, 我是我 382

最后修改: 2012-02-05 23:10:43

5.15 钩子 - 扩展框架的核心
钩子 - 扩展框架的核心
CodeIgniter 的钩子功能使得您可以在不修改系 统核心文件的基础上来改变或增加系统的核心运 行功能。 当 CodeIgniter 运行后,它会产生出 一个特殊的进程, 这个进程在 项目流程(See 3.7) 页面中有说明。 当然,您可以自定义一些动作来 替代程序运行过程中的某些阶段。例如,您可以在 控制器刚刚载入前或刚刚载入后来运行特定的脚 本,或者在其他时刻来触发您的脚本。
383

启用钩子
钩子功能可以在全局范围内打开或关闭, 您可以在 application/config/config.php 文件中设 定:
$config['enable_hooks'] = TRUE;

定义钩子
钩子是在 application/config/hooks.php
384

文件中定义的。 每个钩子可以用以下格式的数组 来定义:
$hook['pre_controller'] = array( 'class' => 'MyClass', =>

'function' 'Myfunction', 'filename'

=>

385

'Myclass.php', 'filepath' => 'hooks', 'params' array('beer', 'wine', 'snacks') ); =>

说明: 数组的索引与你使用的指定挂钩点名字相关.上面 的例子中挂钩点是 pre_controller. 挂钩点参
386

数列表如下所示. 以下各项将定义在你的相关钩 子数组里: class 你希望调用的类名.如果你更喜欢使 用过程函数代替类的话,此项保留为空. function 你希望调用的函数名. filename 包含有你的类/函数的文件名. filepath 包含你的脚本的目录名. 注意: 你的脚本放在 application 文件夹下的目录里, 这 样 filepath 就以那个文件夹(application)为基准. 例如, 如果你的脚本放在 application/hooks 下, 你可以把 hooks 作为你的 filepath. 如果你的脚本 放在 application/hooks/utilities 下你可以把
387

?

?

?

?

hooks/utilities 作为 filepath. 注意后面没有"/". 如果不放在根目录下可以根据相对路径的配置,来完 成调用。这样就可以完成,多个应用共享一个钩子。 params 你希望传递给脚本的任何参数. 此项是可选的.

?

同一挂钩点的多次引用
如果你想在同一个挂钩点引用多个脚本,最简单的 方式就是把你的数组定义成二维的,像这样:

388

$hook['pre_controller'][] = array(

'class'

=> 'MyClass', =>

'function' 'Myfunction', 'filename' 'Myclass.php',

=>

389

'filepath' => 'hooks', 'params' array('beer', 'wine', 'snacks') ); =>

$hook['pre_controller'][] = array(

'class' 390

=>

'MyOtherClass', 'function' 'MyOtherfunction', 'filename' 'Myotherclass.php', 'filepath' => 'hooks', 'params' 391 => => =>

array('red', 'yellow', 'blue') );

注意在每个数组索引后面的中括号:

$hook['pre_controller'][]

这允许你的多个脚本拥有相同的挂钩点。 你定义数 组的顺序将是程序执行的顺序.

392

挂勾点
以下是一组可用的挂钩点. pre_system 系统执行的早期调用.仅仅在 benchmark 和 hooks 类 加载完毕的时候. 没有执行路由或者其它 的过程. pre_controller 在调用你的任何控制器之前调用.此时所用的基础类, 路由选择和安全性检查都已完成.

?

?

393

?

post_controller_constructor 在你的控制器实例化之后,任何方法调用之前调用. post_controller 在你的控制器完全运行之后调用. display_override 覆盖_display()函数, 用来在系统执行末尾向 web 浏览器发送最终页面.这允许你用自己的方法来显示. 注意,你需要通过 $this->CI =& get_instance() 引用 CI 超级对象,然后这样的 最终数据可以通过调用 $this->CI->output->get_output() 来获 得。

?

?

394

?

cache_override 可以让你调用自己的函数来取代 output 类中的 _display_cache() 函数.这可以让你使用自己的 缓存显示方法 post_system 在最终着色页面发送到浏览器之后,浏览器接收完最 终数据的系统执行末尾调用

?

翻译贡献者: anbutu, chouqiuqiu, elviscai, Hex, Jack, nardo, qixingyue, shishirui 最后修改: 2011-06-16 18:26:42

395

5.16 关于 CodeIgniter
关于 CodeIgniter
CodeIgniter 最 早 是 由 Rick Ellis 开 发 的 (EllisLab 公司的 CEO) 。这个框架是为真实应 用而编写的, 集成了很多类库、 辅助函数(helpers) 以及从 ExpressionEngine 借用的子系统。 CodeIgniter 当前由“ExpressionEngine 开发 团队”开发并维护。 Bleeding edge development is spearheaded by the handpicked contributors of the Reactor Team.
396

来自 Ruby on Rails 的灵感启发我们创造了一个 PHP 框架,并且将框架的概念引入到网络社区的 一般意识中。

翻译贡献者: Hex, imjie, irini 最后修改: 2012-02-05 23:27:08

5.17 管理你的应用程序
管理你的应用程序
默认情况下, 你会将应用程序放入 application/ 中,并且可能用 CodeIgniter 只管理这一个应用
397

程序。当然,多个应用程序共享一个 CodeIgniter, 甚至对 application 文件夹进 行重命名或更换路径也是可行的。

对应用程序文件夹重命名
如果你要对 application 进行重命名, 你需要 打 开 index.php 文 件 , 对 变 量 $application_folder 进行更改:
$application_folder = "application";

398

更改你的应用程序的文件夹路径
你可以将 application 文件夹从 system 文件 夹中挪放到服务器的其他的位置。 但是你还要更改 index.php 文 件 里 将 $application_folder 变量设置为服务器的全路径。
$application_folder "/Path/to/your/application"; =

399

在一个 CodeIgniter 下运行多个应用 程序
如果你想要多个应用程序共享同一个 CodeIgniter, 你要将 application 下所有的 文件夹放在不同的应用程序的文件夹内。 例如,你要建立两个应用程序 "foo" 和 "bar", 你的应用程序文件夹的结构可能会像下面的这样:
applications/foo/

400

applications/foo/config/ applications/foo/controllers/ applications/foo/errors/ applications/foo/libraries/ applications/foo/models/ applications/foo/views/ applications/bar/ 401

applications/bar/config/ applications/bar/controllers/ applications/bar/errors/ applications/bar/libraries/ applications/bar/models/ applications/bar/views/

要选择使用某个应用程序,你需要打开主
402

index.php 文 件 , 并 且 设 置 $application_folder 变量为目标路径。 例如, 通过如下设置, 就可以选择使用 "foo" 应用程序:
$application_folder = "applications/foo";

注意: 每一个应用程序都会需要它自己的 index.php 文件来调用他的目标程序。你可以随意 对 index.php 文件进行命名。

翻译贡献者: aykirk, Hex, thankwsx, zhupeng 最后修改: 2011-01-31 18:04:05 403

5.18 开发规范

常用风格和语法
下面将描述采用 CI 开发中的编码的规范.

内容列表
文件格式 PHP 闭合标签
404

?

?

?

类和方法的命名 变量命名 注释 常量 TRUE, FALSE, 和 NULL 逻辑运算符 比较返回值和类型映射 调试代码 空行分割 兼容性
405

?

?

?

?

?

?

?

?

?

?

用常规词做类名和文件名 数据库表名 一个文件一个类 空白 断行 代码缩进 Bracket and Parenthetic Spacing Localized Text 私有方法和变量 PHP 错误
406

?

?

?

?

?

?

?

?

?

?

短标签 每行一条语句 字符串 SQL 查询 缺省函数参数

?

?

?

?

文件格式
文件应该使用 Unicode (UTF-8) 编码保存。同 时不要使用 字节序标记(BOM) 。与 UTF-16 和 UTF-32 不同,UTF-8 编码的文件不需要指明字
407

节序,而且 字节序标记(BOM) 在 PHP 中会产生 预期之外的输出, 阻止了应用程序设置它自己的头 信息。应该使用 Unix 格式的行结束符(LF)。 以下是在一些常见的文本编辑器中更改这些设置 的方法。针对你的编辑器,方法也许会有所不同; 请参考你的编辑器的说明。
TextMate

1. Open the Application Preferences 2. Click Advanced, and then the "Saving" tab

408

3. In "File Encoding", select "UTF-8 (recommended)" 4. In "Line Endings", select "LF (recommended)" 5. Optional: Check "Use for existing files as well" if you wish to modify the line endings of files you open to your new preference.
BBEdit

1. Open the Application Preferences 2. Select "Text Encodings" on the left.
409

3. In "Default text encoding for new documents", select "Unicode (UTF-8, no BOM)" 4. Optional: In "If file's encoding can't be guessed, use", select "Unicode (UTF-8, no BOM)" 5. Select "Text Files" on the left. 6. In "Default line breaks", select "Mac OS X and Unix (LF)"

PHP 闭合标签
410

PHP 闭合标签“?>”在 PHP 中对 PHP 的分析器是 可选的。 但是,如果使用闭合标签,任何由开发 者,用户,或者 FTP 应用程序插入闭合标签后面 的空格都有可能会引起多余的输出、 php 错误、 之 后的输出无法显示、空白页。因此,所有的 php 文件应该省略这个 php 闭合标签,并插入一段注 释来标明这是文件的底部并定位这个文件在这个 应用的相对路径。 这样有利于你确定这个文件已经 结束而不是被删节的。
INCORRECT: <?php echo "Here's my code!"; ?> CORRECT: <?php echo "Here's my code!"; /*

411

End

of

file

myfile.php

*/

/*

Location: ./system/modules/mymodule/myfile.p hp */

类和方法(函数)的命名规则
类名的首字母应该大写。如果名称由多个词组成, 词之间要用下划线分隔,不要使用骆驼命名法。类 中所有其他方法的名称应该完全小写并且名称能 明确指明这个函数的用途,最好用动词开头。尽量
412

避免过长和冗余的名称
不当的: class superclass class SuperClass 适当的: class Super_class class Super_class

{ function __construct() { } }

不当的和适当的方法名称的示例:
不当的: function fileproperties() // 方法名没有清晰 的描述以及下划线分割单词 function fileProperties()

413

// 方 法 名 没 有 清 晰 的 描 述 以 及 使 用 了 驼 峰 法 命 名 function getfileproperties() // 还可以!但是忘记了下 划线分割单词 function getFileProperties() // 使用了 驼 峰 法 命 名 function

get_the_file_properties_from_the_file() // 方法名 太冗长 适当的: function get_file_properties() // 清 晰的方法名描述,下划线分割单词,全部使用小写字母 414

变量命名
变量的命名规则与方法的命名规则十分相似。 就是 说,变量名应该只包含小写字母,用下划线分隔, 并且能适当地指明变量的用途和内容。那些短的、 无意义的变量名应该只作为迭代器用在 for()循环 里。
不当的: $j = &apos;foo&apos;; // 单字符变量应该只 作为 for()的循环变量使用 $Str // 使用了大写字母

415

$bufferedText // 使用了驼峰命名,而且变量名应该更 短,并有清晰的语法含义 $groupid // 多个词组,应该 使用下划线分割 $name_of_last_city_used // 太长 了 适当的: for ($j = 0; $j < 10; $j++) $str $buffer $group_id $last_city

注释
416

通常,代码应该被详细地注释。这不仅仅有助于给 缺乏经验的程序员描述代码的流程和意图, 而且有 助于给你提供丰富的内容以让你在几个月后再看 自己的代码时仍能很好的理解。 注释没有强制规 定的格式,但是我们建议以下的形式。 文档块(DocBlock) 式的注释要写在类和方法的 声明前,这样它们就能被集成开发环境(IDE)捕 获:
/** * Super Class * * @package Package Name * @subpackage Subpackage * @category Category

417

*

@author

Author */

Name class

*

@link

http://example.com {

Super_class

/** * Encodes string for use in XML * *

@access public * @param string * @return string */ function xml_encode($str)

使用行注释时,在大的注释块和代码间留一个空 行。

418

// break up the string by newlines $parts = explode("\n", $str); // A longer comment that needs to give greater detail on what is // occurring and why can use multiple single-line comments. Try to // keep the width reasonable, around 70 characters is the easiest to // read. Don't hesitate to link to permanent external resources // that 419

may

provide

greater

detail:

//

//

http://example.com/information_about_somethi ng/in_particular/ $parts = $this->foo($parts);

常量
常量命名除了要全部用大写外, 其他的规则都和变 量相同。在适当的时候,始终使用 CodeIgniter 常量,例如 LASH, LD, RD, PATH_CACHE 等等.
420

不当的: myConstant // 未使用下划线分割单词,未全 部 使 用 大 写 字 母 N // 不 能 使 用 单 个 字 母 作 为 常 量 S_C_VER // 常 量 名 没 有 清 晰 的 含 义 $str =

str_replace('{foo}', 'bar', $str); // should use LD and RD constants 恰 当 的 : MY_CONSTANT $str =

NEWLINE

SUPER_CLASS_VERSION

str_replace(LD.'foo'.RD, 'bar', $str); 421

TRUE, FALSE, 和 NULL
TRUE, FALSE, 和 NULL 关键字应该总是完 全大写的。
不当的: if ($foo == true) $bar = false; function foo($bar = null) 恰当的: if ($foo == TRUE) $bar = FALSE; function foo($bar = NULL)

422

逻辑操作符
|| 有时让人底气不足,不容易辨识,因为在某些 输出设备上它不够清晰(可能看起来像数字 11). && 要优先于 AND ,不过两者都可以被接受, 使 用 ! 时要在其前后都加一个空格。
不当的: if ($foo || $bar) if ($foo AND $bar) // 可以, 但 有 时 不 被 常 用 的 语 法 程 序 高 亮 推 荐 ( 高 亮 标 识 ) if (!$foo) if (! is_array($foo)) 恰当的: if ($foo OR

423

$bar) if ($foo && $bar) // 推荐 if ( ! $foo) if ( ! is_array($foo))

比较返回值与类型映射
Some PHP functions return FALSE on failure, but may also have a valid return value of "" or 0, which would evaluate to FALSE in loose comparisons. Be explicit by comparing the variable type when using these return values in conditionals to
424

ensure the return value is indeed what you expect, and not a value that has an equivalent loose-type evaluation. 试译: 部分 PHP 函数执行失败时返回 FALSE, 但 也可能有一个有效的返回值 "" 或 0, 它在松散 比较中会被计算为 FALSE. 在条件语句中使用这 些返回值的时候, 为了确保返回值是你所预期的类 型而不是一个有着松散类型的值, 请进行显式的比 较。 Use the same stringency in returning and checking your own variables. Use = and != as necessary.
425

试译:在返回和检查你自己的变量时也要遵循这种严 格的方法,必要时使用= 和 != 。
不当的: // 如

果 'foo' 位于此字符串的起始处,strpos 将返回 0, // 此处条件判断的结果为 TRUE if (strpos($str, 'foo') == FALSE) 恰当的: if (strpos($str, 'foo') === FALSE) 不当的: function build_string($str = "") { if ($str == "") // uh-oh! 如果传递的参数是 FALSE 或者整数 0

426

那 会 怎 么 样 ?

{

}

}

恰 当 的 :

function

build_string($str = "") { if ($str === "") { } }

See also information regarding typecasting, which can be quite useful. Typecasting has a slightly different effect which may be desirable. When casting a variable as a string, for instance, NULL and boolean FALSE variables become empty strings, 0 (and other numbers) become strings of digits, and boolean TRUE becomes "1": 试译:另见类型映射的信息,也会非常有用。类型
427

映射的结果稍微有些不同,但也是可用的。比如, 你把一个变量映射为字符串的时候,NULL 以及布 尔值 FALSE 会变成空字符串,0(以及其它数字) 变成包含数字的字符串,布尔值 TRUE 变成 "1":
$str = (string) $str; // 将 $str 映射为字符串

调试代码
No debugging code can be left in place for submitted add-ons unless it is commented out, i.e. no var_dump(), print_r(), die(),
428

and exit() calls that were used while creating the add-on, unless they are commented out. 试译: 在已提交的附加组件所在的地方不能有调试 代码,它们被注释掉的情况除外,例如,创建附加 组件时不能调用 var_dump(), print_r(), die(), 以及 exit() ,除非它们已经被注释掉了。
// print_r($foo);

文件中的空格
429

No whitespace can precede the opening PHP tag or follow the closing PHP tag. Output is buffered, so whitespace in your files can cause output to begin before CodeIgniter outputs its content, leading to errors and an inability for CodeIgniter to send proper headers. In the examples below, select the text with your mouse to reveal the incorrect whitespace. 试译:在 PHP 开始标记之前和结束标记之后都不 能有空格。输出已经被缓存,所以文件中的空格会 导致 CodeIgniter 在输出自己的内容之前就开始 了输出,这会使 CodeIgniter 出错且无法输出正
430

确的 header。在下面的例子中,使用鼠标选中这 些文本,你就能看到那些不应该有的空格。 不当的:
<?php // ...在 PHP 开始标记上面有空格和换行符 // 并且在 PHP 结束标记后面也有空格 ?>

恰当的:
<?php // 本例中, PHP 开始标记之前和结束标记之后就 没有空格 ?> 431

兼容性
Unless specifically mentioned in your add-on's documentation, all code must be compatible with PHP version 4.3+. Additionally, do not use PHP functions that require non-default libraries to be installed unless your code contains an alternative method when the function is not available, or you implicitly document that your add-on requires said PHP libraries. 试译:除非你的附加组件的文档中有特别说明,否
432

则所有代码必须与 PHP 5.1 以上版本兼容。此外, 不要使用那些依赖于非默认安装的库的函数, 除非 你的代码中包含了该函数不可用时的替代方法, 或 者你在文档中明确说明了你的附加组件需要某些 库。

使用常见词语来命名类和文件
When your class or filename is a common word, or might quite likely be identically named in another PHP script, provide a unique prefix to help prevent collision. Always realize that your end users may be
433

running other add-ons or third party PHP scripts. Choose a prefix that is unique to your identity as a developer or company. 试译:当你的类或文件名是一个常见词语时,或者 是很可能与另一个 PHP 脚本同名时,使用一个唯 一的前缀来避免冲突。你必须始终明白这一点:你 的最终用户可能会运行其它第三方的附加组件或 者 PHP 脚本。选择一个能够唯一标识开发者或公 司的前缀。
不 当 的 : class Email pi.email.php class Xml ext.xml.php class Import mod.import.php 恰当的: 434

class Pre_email pi.pre_email.php class Pre_xml ext.pre_xml.php mod.pre_import.php class Pre_import

数据库表名
Any tables that your add-on might use must use the 'exp_' prefix, followed by a prefix uniquely identifying you as the developer or company, and then a short descriptive table
435

name. You do not need to be concerned about the database prefix being used on the user's installation, as CodeIgniter's database class will automatically convert 'exp_' to what is actually being used. 你的附加组件所用到的任何表都必须使用 'exp_' 这个前缀, 然后是一个能够唯一标识开发者或公司 的前缀,最后才是一个简短的描述性的表名。你不 需要担心用户安装时所使用的数据库前缀,因为 CodeIgniter 的数据库类将根据实际情况自动地 对 'exp_' 进行转换。
不 当 的 : email_addresses // 缺 少 这 两 个 前 缀 436

pre_email_addresses

//

缺 少

exp_

前 缀

exp_email_addresses // 缺 少 唯 一 前 缀 恰 当 的 : exp_pre_email_addresses

NOTE: Be mindful that MySQL has a limit of 64 characters for table names. This should not be an issue as table names that would exceed this would likely have unreasonable names. For instance, the following table name exceeds this limitation by one character. Silly, no?
437

exp_pre_email_addresses_of_registered _users_in_seattle_washington 说明: 请注意 MySQL 对表名的限制是不能多于 64 个字符。会超出这个限制的那些表名都是不合理的, 因此这应该不是问题。例如,下面的这个些表名比最 大限制多出一个字符。这很傻,不是吗? exp_pre_email_addresses_of_registered _users_in_seattle_washington

一个文件一个类
Use separate files for each class your
438

add-on uses, unless the classes are closely related. An example of CodeIgniter files that contains multiple classes is the Database class file, which contains both the DB class and the DB_Cache class, and the Magpie plugin, which contains both the Magpie and Snoopy classes. 对于你的附加组件所使用的类应当遵循一个文件 一个类的原则,除非这些类是紧密相关的。 CodeIgniter 的文件中包含多个类的一个例子是 数据库类文件,其中包含了 DB 类和 DB_Cache 类,还有 Magpie 插件,其中包含了 Magpie 和 Snoopy 类。
439

空格
Use tabs for whitespace in your code, not spaces. This may seem like a small thing, but using tabs instead of whitespace allows the developer looking at your code to have indentation at levels that they prefer and customize in whatever application they use. And as a side benefit, it results in (slightly) more compact files, storing one tab character versus, say, four space characters.
440

在代码中使用 tab 代替空格。 这虽然看起来像是小 事, 但是使用 tab 代替空格有利于那些阅读你的代 码的开发者在他们各自所使用的应用程序中自定 义缩进方式。此外还有一个好处是,使用这种方式 保存的文件稍微紧凑一点。

换行
文件必须使用 Unix 换行符保存。这对于那些在 Windows 下的开发者来说更为重要, 但无论如何, 确保你的文本编辑器已经设置为使用 Unix 换行符 来保存文件。
441

代码缩进
使用 Allman 风格缩进。除了类声明以外,括号 总是独占一行,且缩进与“属于”它的控制语句同 级。
不恰当的: function foo($bar) { // ... } foreach ($arr as $key => $val) { // ... } if ($foo == $bar) { // ... } else { // ... } for ($i = 0; $i < 10; $i++)

442

{ for ($j = 0; $j < 10; $j++) { // ... } } 恰当的: function foo($bar) { // ... } foreach ($arr as $key => $val) { // ... } if ($foo == $bar) { // ... } else { // ... } for ($i = 0; $i < 10; $i++) { for ($j = 0; $j < 10; $j++) { // ... } }

方括号及圆括号内的空格符
443

通常情况下,不要在方括号"[]"和圆括号"()"内增 加任何空格符。 唯一的例外就是为了提高可读性和 区别开它们与函数,在接受参数的 PHP 语法控制 结构所使用的括号里,需要增加空格符(declare, do-while, elseif, for, foreach, if, switch, while)。
不恰当的: $arr[ $foo ] = 'foo'; 正确的: $arr[$foo] = 'foo'; // 数 组 键 值 的 方 括 号 内 没 有 空 格 不 恰 当 的 : function foo ( $bar ) { } 正确的: function foo($bar)

444

// 函 数 声 明 的 圆 括 号 内 没 有 空 格 { } 不 恰 当 的 : foreach( $query->result() as $row ) // PHP 语法控 制结构之后有空格,但不是在圆括号内 正确的: foreach ($query->result() as $row)

本地化文本
Any text that is output in the control panel should use language variables in your lang
445

file to allow localization. 所有在控制面板输出的文本都应该使用 lang 文 件里的语言变量来允许本地化。
INCORRECT: return "Invalid Selection"; CORRECT: return $this->lang->line('invalid_selection');

私有方法和变量
Methods and variables
446

that

are

only

accessed internally by your class, such as utility and helper functions that your public methods use for code abstraction, should be prefixed with an underscore. 如果方法和变量只在类的内部使用, 应当使用下划 线作为前缀。
convert_text() // public method _convert_text() // private method

PHP Errors
447

Code must run error free and not rely on warnings and notices to be hidden to meet this requirement. For instance, never access a variable that you did not set yourself (such as $_POST array keys) without first checking to see that it isset(). Make sure that while developing your add-on, error reporting is enabled for ALL users, and that display_errors is enabled in the PHP environment. You can check this setting with:
if (ini_get('display_errors') 448 == 1) { exit

"Enabled"; }

On some servers where display_errors is disabled, and you do not have the ability to change this in the php.ini, you can often enable it with:
ini_set('display_errors', 1);

NOTE: Setting the display_errors setting with ini_set() at runtime is not identical to having it enabled in the PHP environment. Namely, it
449

will not have any effect if the script has fatal errors

短标记
一直使用 PHP 完整标记, 以免服务器不支持短标 记,也就是未打开 short_open_tag 。 (IT 不倒 翁注释: 这条已经不成立, 因为新版本的 CI 已经 解决了服务器不支持短标记的问题, 不过还是建议 使用完整标记)

450

不正确的: <? echo $foo; ?> <?=$foo?> 正确的: <?php echo $foo; ?>

每行一条语句
切记不要在一行写多条语句
不 正 确 : $foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag); 正确: $foo = 'this'; 451

$bar = 'that'; $bat = str_replace($foo, $bar, $bag);

字符串
一直使用单引号除非你需要解析变量, 如果需要解 析 变 量 请 使 用 大 括 号 , to prevent greedy token parsing. 如果字符串包含单引号的话你可 以使用双引号,这样就不用转义了。

452

INCORRECT: "My String" // 没有解析变量,不需要 使用双引号 "My string $foo" // 解析变量需要使用括 号 'SELECT foo FROM bar WHERE baz = \'bag\'' // 需要转义单引号''时这样写比较难看,可以使用双引号 CORRECT: 'My String' "My string {$foo}"

"SELECT foo FROM bar WHERE baz = 'bag'"

453

SQL 查询
MySQL 的关键字一直大写: SELECT, INSERT, UPDATE, WHERE, AS, JOIN, ON, IN 等等 考虑到易读性,请将从句句分成多行来写。
INCORRECT: // keywords are lowercase and query is too long for // a single line (... indicates continuation of line) $query =

454

$this->db->query("select foo, bar, baz, foofoo, foobar as raboof, foobaz from

exp_pre_email_addresses ...where foo != 'oof' and baz != 'zab' order by foobaz limit 5, 100"); CORRECT: $query = $this->db->query("SELECT foo, bar, baz, foofoo, foobar AS raboof, foobaz FROM exp_pre_email_addresses WHERE foo != 455

'oof' AND baz != 'zab' ORDER BY foobaz LIMIT 5, 100");

函数的默认参数
可能的话,请提供函数的默认参数,这样可以阻止 诸如错误的调用的 PHP 错误, 同时可以获取公用 的返回值,节约很多行代码。例:
function foo($bar = '', $baz = FALSE) 456

翻 译 贡 献 者 : alsove, bnlt, Hex, ianyang, IT 不 倒 翁 , neversaylate, shallow, xxx1052, yinzhili, 笼中 最后修改: 2012-02-05 23:42:42

5.19 控制器
控制器是应用程序的心脏, 因为它们决定如何处理 HTTP 请求。 什么是控制器? 你好,世界
457

?

?

?

方法 将 URI 片段传递给方法 定义一个默认控制器 重新定义方法的调用规则 控制数据输出 私有方法 如何将控制器放入子文件夹中 构造函数 已保留的方法名称

?

?

?

?

?

?

?

?

458

什么是控制器?
简而言之,一个控制器就是一个类文件,是以一种 能够和 URI 关联在一起的方式来命名的。 假设这个 URI:
example.com/index.php/blog/

在上面的例子中,CodeIgniter 将尝试寻找并装 载一个名为 blog.php 的控制器。 当控制器的名字匹配 URI 的第一段时,它将被 装载。
459

让我们试试看: 你好,世界!
我们来创建一个简单的控制器, 以便更直观地了解 其工作原理。使用你的文本编辑器,创建一个名为 blog.php 的文件,然后输入下列代码:

460

<?php class Blog extends CI_Controller { function __construct() { parent::__construct(); } public function index() { echo '你好,世界!'; } } ?>

然后保存文件到 application/controllers/ 文件夹。
461

现在使用类似这样的 URL 访问你的站点:
example.com/index.php/blog/

如果你做的没错,你应该看到你好,世界!. 注意:类名必须以大写字母开头。换句话说,这是 有效的:
<?php class Blog extends CI_Controller {

462

} ?>

下面的 blog 首字母 b 小写,是属于无效的写法:
<?php class blog extends CI_Controller {

}

463

?>

同时,始终确保你的控制器扩展自父控制器类,以 便它能够继承其所有的方法。

方法
上面的例子中用到的方法名是 index()。如果 URI 的第二部分为空的话,会默认载入 “index” 方 法 。 也 可 以 将 地 址 写 成 这 样 来 访 问 “Hello World”:
464

example.com/index.php/blog/index/

URI 的第二部分是用来决定调用控制器中哪个 方法的。 我们再来试试。在你的控制器中加入一个新的方 法:

465

<?php class Blog extends CI_Controller { function __construct() { parent::__construct(); } public function index() { echo '你好,世界!'; } public function comments() { echo '看这里!'; } } ?>

466

现在在地址栏中输入下面的内容来访问 comments 方法:
example.com/index.php/blog/comments/

你应该看到新的信息了:看这里!

将 URI 片段传递给方法
如果你的 URI 超过两个部分,那么超过的将被作 为参数传递给方法。
467

举例来说,如果你的 URI 是这样的:

example.com/index.php/products/shoes/sand

als/123

URI 的第 3 和第 4 部分会被传递给你的方法 (“sandals” 和 “123”) :
<?php

468

class Products extends CI_Controller {

public function shoes($sandals, $id) { echo $sandals; echo $id; }

469

} ?>

上面的方法调用时必须给两个相应的参数, 要不然 会出错。当然你也可以像下面这样写,就不用在调 用的时候给参数了!
<?php class Products extends CI_Controller {

470

public function shoes($sandals='Test', $id= { echo $sandals; echo $id; } } ?> 471

注意:如果你使用 URI 路由(See 5.2)特性, 则传递 到方法中的 URI 片段将被重新路由一次。

定义默认控制器
当你的网站没有设置 URI 或者直接从根目录访 问的时候,CodeIgniter 会加载默认控制器。打 开 application/config/routes.php 文 件 来设置默认控制器:
$route['default_controller'] = 'Blog'; 472

这里的 Blog 就是你希望使用的控制器的名字。 如果此时你不指定任何 URI 片段来访问你的主 页就会看到默认的“Hello World”信息。

重新定义方法的调用规则
如上所述,URI 的第二片段决定会调用控制器中 的 哪 个 方 法 。 CodeIgniter 允 许 你 使 用 _remap() 方法来废除这种规则:
public function _remap()

473

{ // Some code here... }

注意:如果你的控制器中包含一个名为

_remap() 的方法, 那么不管你的 URI 中包含什
么,它总会被忽略掉。这个方法会废除掉由 URI 片 段来决定哪个方法被调用的规则,允许你重新定义调 用方法的规则(方法的路由规则)。 被重新定义的方法调用方式(一般是 URI 中的第
474

二片段)将作为一个参数传递给 _remap() :
public function _remap($method) { if ($method == 'some_method') { $this->$method(); }

475

else { $this->comments(); } }

任何附加在该方法名称之后的段都会被视为 _remap() 的第二个参数(可选) 。这个可选的 数组参数可以与 PHP 的 call_user_func_array
476

联用,模拟 CodeIgniter 的默认行为。
public function _remap($method, $params = array()) { $method = 'process_'.$method; if (method_exists($this, $method)) {

477

return

call_user_func_array(array($this,

$method), $params); } show_404(); }

处理输出
478

CodeIgniter 拥有一个输出类用来确保你修改的 数据会自动被传递给浏览器。 关于这个的更多信息 可以在视图(See 5.24)和输出类(See 6.23)里找 到。有些时候,你可能想要自己发布修改一些最终 的数据或是自己把它传递给浏览器。CodeIgniter 允许你给你的控制器增加一个名为 _output() 的方法来接收最终的数据。 注意: 如果你的控制器包含一个 _output() 方 法,那么它将总是被调用,而不是直接输出最终的 数据。这个方法类似于 OO 里的析构函数,不管你 调用任何方法这个方法总是会被执行。 例如:
479

public function _output($output) { echo $output; }

请注意,你的 _output() 将接收最终的数据。 Benchmark 和内存的使用率数据将被渲染,缓存文 件会被写入(如果已启用缓存),并且 HTTP 头也将 被发送(如果您使用该功能(See 6.23)),然后交给 _output() 函数。
480

为了让你的控制器输出缓存正确, 它的 _output() 函数可以这样来写:
if ($this->output->cache_expiration > 0) { $this->output->_write_cache($output); }

如果您正在使用页面执行时间和内存使用统计

的功能,这可能不完全准确,因为他们不会考虑到你 所做的任何进一步的动作。请在输出类(See 6.23)

481

参用可用的方法,来控制输出以使其在任何最终进程 完成之前执行。

私有方法
在某些情况下, 你可能想要隐藏一些方法使之无法 对外查阅。将方法私有化很简单,只要在方法名字 前面加一个下划线(“_”)做前缀就无法通过 URL 访问到了。例如,如果你有一个像这样的方法:
private function _utility()

482

{ // some code }

那么, 通过下面这样的 URL 进行访问是无法访问 到的:
example.com/index.php/blog/_utility/

如何将控制器放入子文件夹中
483

如果你在建立一个大型的应用程序,你会发现 CodeIgniter 可以很方便的将控制器放到一些子 文件夹中。 只要在 application/controllers 目录下创 建文件夹并放入你的控制器就可以了。 注意: 如果你要使用某个子文件夹下的功能,就 要保证 URI 的第一个片段是用于描述这个文件 夹的。例如说你有一个控制器在这里:

application/controllers/products/shoes.php

调用这个控制器的时候你的 URI 要这么写:
484

example.com/index.php/products/shoes/show/1 23

你的每个子文件夹中需要包含一个默认的控制器, 这样如果 URI 中只有子文件夹而没有具体功能 的时候它将被调用。 只要将你作为默认的控制器名 称 在 application/config/routes.php 文 件中指定就可以了。 CodeIgniter 也允许你使用 URI 路由(See 5.2) 功能来重新定向 URI。

485

构造函数
如果要在你的任意控

相关文章:
Codeigniter2.1中文手册.doc
Codeigniter2.1中文手册 - CodeIgniter 用户指南 (版
ci框架2.2.0中文手册安装.pdf
ci框架2.2.0中文手册安装_计算机软件及应用_IT/计算机_专业资料。ci框架2...- CodeIgniter | | |Wiki 1/4 l l l l CodeIgniter : canglan, Drice,...
ci框架中文手册常规主题.pdf
ci框架中文手册常规主题 - ci框架中文手册,ci框架中文手册常规主题篇,CodeIgniter 用户指南 版本 2.2.0
CodeIgniter 用户指南 版本 2.1(下).doc
暂无评价|0人阅读|0次下载 | 举报文档 CodeIgniter 用户指南 版本 2.1(下)_..."file-5" alternator() 当执行一个循环时,让两个或两个以上的条目轮换使用。...
ci框架中文手册类库参考.pdf
ci框架中文手册,ci框架中文手册类库参考篇,CodeIgniter 用户指南 版本 2.2.0 ...4/1 3/115 CodeIgniter : <?php echo $this->benchmark->elapsed_time();...
ci框架中文手册适配器参考.pdf
ci框架中文手册,ci框架中文手册适配器参考篇,CodeIgniter 用户指南 版本 2.2.0...('title' => $match, 'page1' => $match, 'page2' => $match); $...
公司CI手册(修订版2).ppt
公司CI手册(修订版2)_生产/经营管理_经管营销_专业...珠海比佰公司此讲义仅供内部培训使用。未经本公司 ...
2.附件-CI实施流程及附表.xls
1页/共1页 分享到: X 分享到: 使用一键分享,轻松赚取财富值, 了解...大小:21.29KB 所需财富值:2 加入会员!获取文档下载券 登录百度文库,专享文档...
《CI》设计2 CI三大构成_图文.ppt
CI的基本构成CI的子系统及其要素 CI由...皆能 依CI手册参考,进行形象统一性的评估,在形式...
施工现场CI实施指导手册(2014版)_图文.pdf
施工现场 CI 实施指导手册 (2014 ) 中建局第一建筑工程有限公司 1 前 言 CI 战略作为国际先进的管理科学,中国建筑工程总公司率 先将其引入建筑企业,成功...
CI设计2-ci的基本构成要素_图文.ppt
CI设计2-ci的基本构成要素 - 第二章 CI的基本构成要素 CIS=MI+BI+VI 本章重点不难点: 理念识别 ? 行为识别 ? 规觉识别 ? 2.1理念识别 2.2行为识别 2...
CI528用户手册-2.11-111105(带比例阀)_图文.pdf
35 CI528 氧分析仪用户手册部分 注意事项 1、 为正确使用本分析仪请仔细阅读用户手册; 2、 安装及维护应由专业人员进行; 3、 为减少电子噪声,所有的信号...
51CTO下载-2[1].CI+Roadshow+slides+_图文.ppt
51CTO下载-2[1].CI+Roadshow+slides+ - 惠普融合基
二、CI的四大目的(精)_图文.ppt
暂无评价|0人阅读|0次下载 | 举报文档 CI的四大目的(精)_其它_职业教育...一个企业的名字在社会大众、消费者心 目中有多大份额,它的产品的使用率有多高...
中建CI培训课件_图文.ppt
、新版《企业形象视觉识别规范手册》房建系统分册 、新版CI手册更改、增加内容
CI科目二技巧大全_图文.doc
享专业文档下载特权 赠共享文档下载特权 10W篇文档免费...右侧出库 准备: 准备:踩离合,挂一档,慢抬离合...用低速挡或使用半联动通过,保证车辆 平稳低速地通过...
CI策划大纲2.doc
1/2 相关文档推荐 CI策划2 28页 1财富值 企业文化与CI策划1-2 78页 免费...使用一键分享,轻松赚取财富值, 了解详情 嵌入播放器: 普通尺寸(450*500pix) ...
第二章 CI系统的基本构成_图文.ppt
第二章 CI系统的基本构成 - 第2章 CI系统的基本构成 2.1 企业形象 2.2 CI的系统构成 课题概述:本章...
LM4041CIX3-1.2+T中文资料.pdf
LM4041CIX3-1.2+T中文资料 - 元器件交易网www.cecb2b.
40项目CI策划_图文.doc
40项目CI策划_营销/活动策划_计划/解决方案_实用文档 0 五年九月十八...并且体积大,且部分混凝土模板支撑体系为高支撑, 外防护使用悬挑架,危险性较大。...
更多相关标签: