CodeIgniter 是一套面向 PHP 的全栈 Web 框架,主打轻量、快速、灵活与安全。它把常用类库做了系统整理,让开发者不用从零搭建就能推进项目。框架的接口与逻辑结构尽量保持简单,代码量也随之减少,方便把精力放在创造性工作上。CodeIgniter 允许按自己习惯的方式组织代码,核心部件可扩展也可替换。目前 CodeIgniter 4 面向 PHP 7.4 及以上版本(含 8.2),CodeIgniter 3 则面向 PHP 5.6 及以上,后者的稳定版本为 3.1.13。

1、 CodeIgniter 4 本身体积约 1.1MB,加上 epub 格式的用户手册也只有 1.6MB
2、 在同类型框架中,CodeIgniter 的性能表现通常更好
3、 框架不强制使用 MVC 架构,开发者可以自行决定是否采用
4、 基本设置已经预先配置,通常只需再配置数据库即可开始使用
- 框架内置针对 CSRF 和 XSS 攻击的防护,CodeIgniter 4 还加入了内容转义和 CSP 支持
- 用户手册覆盖入门介绍、教程、手把手指导以及各框架组件的参考文档
- 支持多种数据库平台,并提供安全性与 XSS 过滤相关能力
- 邮件类支持附件、HTML 或文本邮件、以及 sendmail、SMTP、Mail 等多种协议
- 图像处理库可完成裁剪、缩放、旋转等操作、并支持 GD、ImageMagick 和 NetPBM
- 还包含 User-Agent 类、Trackback 类、XML-RPC 类,以及搜索引擎友好的 URL 和灵活的 URL 路由
- 框架支持钩子和类扩展,方便按项目需要调整行为
1、 需要 PHP 8.1 或更高版本,并启用 mbstring 扩展
3、 使用缓存服务器时,可启用 memcache、memcached(MemcachedHandler)或 redis(RedisHandler)扩展
4、 使用 PHPUnit 时,可启用 dom、libxml(TestResponse 类)以及 xdebug(CIUnitTestCase::assertHeaderEmitted())
- 将 CodeIgniter 文件夹及内部文件上传到服务器,通常让 index.php 位于网站根目录
- 用文本编辑器打开 application/config/config.php 设置网站根 URL,如需加密或会话,在这里设置加密密钥
- 如需使用数据库,打开 application/config/database.php 设置数据库参数
- 若想隐藏 CodeIgniter 的文件位置,可把 system 和 application 目录改成其他名字,再打开主目录下的 index.php,将 $system_path 和 $application_folder 两个变量设为修改后的名字
- 为提升安全性,system 和 application 目录最好放在 Web 根目录之外,避免通过浏览器直接访问
- 框架默认在每个目录放置 .htaccess 文件阻止直接访问,但把目录移出公开访问范围更稳妥,可防止 Web 服务器配置更改或 .htaccess 不被支持的情况
- 若希望 views 目录保持公开,可将其移出 application 目录,然后打开 index.php,分别设置 $system_path、$application_folder 和 $view_folder 三个变量,建议使用绝对路径,例如 "/www/MyUser/system"
- 生产环境还需禁用 PHP 错误报告和其他仅开发环境使用的功能,可通过设置 ENVIRONMENT 常量完成
1、 index.php 作为前端控制器,初始化运行 CodeIgniter 所需的基本资源
2、 Router 检查 HTTP 请求,确定如何处理该请求
3、 如果存在缓存文件,会直接输出到浏览器,不再走后续正常流程
4、 加载应用程序控制器之前,会对 HTTP 请求以及用户提交的数据进行安全检查
5、 控制器加载模型、核心类库、辅助函数以及其他处理请求所需的资源
6、 最后渲染视图并发送至浏览器,若开启缓存,视图会先缓存起来供后续请求使用
7、 IncomingRequest 修复了通过客户端头部检测 HTTPS 的问题,现在只在请求来自可信代理时信任 X-Forwarded-Proto 和 Front-End-Https 头部,相关配置位于 Config\\App::$proxyIPs
8、 查询器修复了 SQL 注入漏洞:deleteBatch() 与 where() 条件一起使用时,WHERE 子句中的绑定值被替换进生成的 SQL,其转义标志被忽视,导致未被转义或引用;现在 deleteBatch() 的 WHERE 绑定会像普通绑定一样转义
9、 UploadedFile::move() 在没有传入第二个参数时会净化客户端提供的文件名,此前未消毒的客户端文件名作为默认值,可能允许路径遍历序列(例如 ../../public/shell.php)把上传文件写到预期目录之外;显式传入第二个参数时不会净化,仍由调用方负责
10、 验证部分:is_image、mime_in 文件上传验证规则现在还会核实客户端文件名非空;此前这些规则只根据内容衍生的 MIME 类型分类上传,带危险客户端扩展名(例如图片前缀文件 magic bytes)的文件可在保留原始扩展名的情况下通过验证
11、 is_image 规则现在在客户端文件名非空但扩展名不是图像扩展名时拒绝上传;mime_in、ext_in 规则现在在客户端非空文件扩展名与检测到的内容不匹配时拒绝上传,与 Blob 所用扩展/内容协议一致;没有任何扩展名的上传文件(例如 JavaScript 上传)仍被接受,因为规则验证的是文件内容
(您的评论需要经过审核才能显示)
0条评论