
CodeIgniter 3.x 官方变更日志深度解读从 3.2.0 到 1.0 的演进路线与源码印证【免费下载链接】CodeIgniterOpen Source PHP Framework (originally from EllisLab)项目地址: https://gitcode.com/gh_mirrors/co/CodeIgniter导读本文以官方 changelog.rst共 3890 行为骨架系统梳理 CodeIgniter 3.x 自 3.2.0 至 3.0.0、以及 2.x/1.x 时代的关键变更脉络。你将掌握3.x 主线版本中哪些配置项被新增、废弃或移除如$config[log_file]、cookie_samesite等、Session/Cache/Query Builder 等核心组件的演进方向、以及每一条重要变更在 system/ 与 application/config/ 源码中的真实落点从而在升级、排查与二次开发时拥有完整的版本视野。一、版本总览这份 Change Log 记录了什么这份文档按时间倒序记录了 CodeIgniter 从 3.2.0Not Released一路回溯到 Beta 1.02006 年 2 月 28 日首发的完整版本历史结构统一为「版本号 发布日期 变更清单Security / General Changes / Core / Libraries / Database / Helpers 分类 Bug fixes」。值得注意的关键节点包括3.2.0未发布版本集中清理历史废弃 API属于一次大规模减负。3.1.13 / 3.1.122022-03-03PHP 8.0/8.1 兼容性与 session 安全修复。3.1.02016-07-26正式放弃 PHP 5.2.x全面转向现代 PHP。3.0.02015-03-30MIT 重新授权、Active Record 更名 Query Builder、Session 库重写是 3.x 的奠基版本。二、3.2.0一次彻底的历史债务清理2.1 运行环境与核心配置的收口彻底放弃 PHP 5.4.8 以下的一切支持。结合 3.1.0 已放弃 PHP 5.2.x、3.0.0 要求 PHP 5.2.4 的脉络可以看到 CI 3.x 对最低 PHP 版本的阶梯式抬升。更新了 Welcome 视图与 HTML 错误模板的新样式对应 application/views/welcome_message.php 与 application/views/errors/html/ 下的模板。可配置目录路径现在会自动补全缺失的尾部DIRECTORY_SEPARATOR避免拼接路径时的双分隔符问题。公共函数set_status_header()新增 103、207、308、421、451 五个 HTTP 状态码定义于 system/core/Common.php对应 IETF 新 RFC 中的 WebDAV、Misdirected Request、Unavailable For Legal Reasons 等场景。2.2 Core 层变更新增$config[log_file]移除$config[log_file_extension]日志文件现在可显式指定文件名。当前仓库 application/config/config.php 中对应的配置项为$config[log_filename]注释说明留空则使用默认log-.date(Y-m-d)..php。移除$config[rewrite_short_tags]PHP 5.4 下?恒可用、移除废弃的$config[global_xss_filtering]。移除 Router 类废弃方法fetch_directory()/fetch_class()/fetch_method()改用类属性访问。移除 Config 库的system_url()方法。URI 库在 CLI 请求下不再应用$config[url_suffix]与$config[permitted_uri_chars]——CLI 场景下这两个限制无意义。Loader 的model()现在总是校验加载的类是否继承自CI_Modelsystem/core/Model.php 定义了该基类。Output 库_display()默认参数由空字符串改为NULL。2.3 Input 库的收编移除$config[allow_get_array]与$config[standardize_newlines]。移除废弃方法is_cli_request()统一改用公共函数is_cli()。set_cookie()默认过期时间改为 0浏览器关闭即失效且传入负值会直接删除 cookie。get_post()/post_get()现在支持嵌套数组键名。2.4 Libraries 层变更移除长期废弃的 Encrypt、Cart、Javascript 三个库Pagination 移除anchor_class选项。Session 库 redis 驱动新增TLS 与 UNIX socket 连接支持。ZIP 库read_dir()现在包含隐藏点前缀文件。Cache 库是本版改动最集中的模块当前仓库 system/libraries/Cache/ 可直接印证新增apcu驱动Cache_apcu.php并在 Cache.php 的驱动白名单中登记。memcached 驱动支持 UNIX socket且忽略未指定 hostname 的配置项。redis 驱动新增database配置自动选择库、移除socket_type配置、优化序列化逻辑。新增get_loaded_driver()方法返回当前实际使用的驱动见 Cache.php。Form Validation 库set_rules()在首个参数非数组且$rules参数未用时抛出BadMethodCallException。新增规则valid_mac对应源码 Form_validation.phpPHP 5.5 直接使用filter_var($mac, FILTER_VALIDATE_MAC)低版本则用正则兼容两种 MAC 书写格式aa:bb:cc:dd:ee:ff/aabb.ccdd.eeff。规则列表中包含is_array时可直接对整个数组进行校验run()新增第二参数返回处理后的数据。Email 库validate选项默认值改为TRUE批量发送时send()恒返回TRUE。Image Manipulation 库dynamic_output渲染时支持new_name自定义输出文件名、尽可能支持多字节文件名并新增WebP 图像支持。2.5 Database 层变更移除禁用 Query Builder 的选项——它成为数据库层的必备组件。OCI8 驱动移除$curs_id属性及get_cursor()、stored_procedure()方法。移除旧版 sqlite 驱动SQLite 2PHP 5.4 不再附带。initialize()失败时抛RuntimeException不再返回错误码db_connect()强制设置连接字符集。Database Forge字段默认值支持CURRENT_TIMESTAMP等日期/时间类型移除add_column()的$_after参数。Query Buildersystem/database/DB_query_builder.php新增having_in()/or_having_in()/not_having_in()/or_not_having_in()四个方法源码 L793-L829 区域统一委托内部_wh_in()到qb_having。where_in()系列四个方法第二参数改为强类型array拒绝非数组输入源码 L721-L778。join()第三参数支持NATURAL子句别名中允许出现点号。2.6 Helpers 层变更移除废弃的 Email Helper、Smiley HelperDate Helper 的standard_date()/nice_date()、Security Helper 的do_hash()、File Helper 的read_file()全部移除官方给出的替代方案均为 PHP 原生函数。url_title()移除 dash / underscore 分隔符选项。Inflector Helper 新增ordinal_format()生成 1st/2nd/3rd 序数词。Download Helperforce_download()可重命名已存在文件、更好利用服务器内存、通过 RFC 6266 的filename*属性支持多字节文件名。String Helper移除trim_slashes()、repeater()及random_string()的 unique/encrypt 选项。HTML Helper移除br()、nbs()meta()支持 charset 与 property 属性doctype()默认文档类型改为HTML 5。Form Helper移除form_prep()改用html_escape()form_upload()删除从未使用的第二个参数。CAPTCHA Helper新增img_alt默认 captcha与img_class选项支持输出data:image/png;base64数据 URI恒生成 PNG废弃$img_path等独立参数的旧用法。三、3.1.x安全加固与 PHP 8 兼容的长尾维护期3.1.x 系列横跨 2016-2022 年是 CI 3.x 生命周期最长、安全补丁最密集的维护线。3.1.12 / 3.1.132022-03修复 PHP 7 下session.use_strict_mode未强制生效导致的会话固定session fixation漏洞。新增SameSiteStrictCSRF cookie 属性配套新增$config[cookie_samesite]见 config.php L390-L401默认 Lax与set_cookie()的$samesite参数。Session 库新增$config[sess_samesite]选项默认 Lax见 config.php L373。为 PHP 8.1 与旧版本之间的兼容引入 Session 驱动包装类源码 Session.php 中is_php(8.0) ? PHP8SessionWrapper : OldSessionWrapper的选择逻辑对应 PHP8SessionWrapper.php 与 OldSessionWrapper.php 两个文件。大量代码适配 PHP 8.0/8.1Database 库新增trans_active()方法暴露事务状态Query Builder 支持FULL [OUTER] JOINDatabase Forge 支持 Oracle 12.1 的AUTO_INCREMENTFile Uploading 支持 WebP 类型检测。3.1.9 – 3.1.112018-20193.1.9auto_link()生成链接默认加relnoopener防 tab hijacking修复 session fixation 漏洞use_strict_mode此前形同虚设。3.1.10pdo/mysql 驱动支持ssl_verifyInflector 的is_countable()因与 PHP 7.3 内建函数冲突更名为word_is_countable()。3.1.11CI_Log日志行尾改用PHP_EOLSession/Cache 的 redis 驱动适配 phpRedis 5Session files 驱动在sess_save_path不可用时记日志并触发启动失败而非抛异常。3.1.3 – 3.1.82017-20183.1.3修复 XSS、vars()文件包含、Email 库mail/sendmail模式下的远程代码执行等漏洞csrf_verify()增加时序侧信道防护form_open()针对 BREACH 攻击防护。3.1.4修复 Apache 下set_status_header()的 header 注入漏洞mbstring.func_overload启用时的一批字节安全byte-safety问题。3.1.8xss_clean()增加对 JavaScript 标签函数的过滤。3.1.02016-07-26修复 odbc 驱动的 SQL 注入set_realpath()过滤php://包装器输入。正式放弃 PHP 5.2.x 及 5.3.7 以下版本。password_hash()兼容函数优先使用random_bytes()、直接读/dev/urandom。Encryption 库优先使用random_bytes()Session 库在回退到 php.ini 的session.save_path时输出 debug 日志。四、3.0.x3.x 大版本的奠基与重构4.1 3.0.02015-03-30从授权到架构的全面升级MIT License 重新授权终结旧有的专有授权对应仓库 license.txt。最低 PHP 要求 5.2.4推荐 5.4默认数据库驱动改为 mysqli。$_SERVER[CI_ENV]可控制ENVIRONMENT常量新增异常处理器错误模板移至 application/views/errors/ 并支持$config[error_views_path]配置。Session 库完全重写为自包含驱动模式$config[sess_driver]提供 files/database/redis/memcached 四种驱动默认 files新增sess_save_path、tempdata 临时数据、has_userdata()等方法。Active Record 正式更名 Query Builder新增get_compiled_select()/get_compiled_insert()/get_compiled_update()/get_compiled_delete()四个只编译不执行的方法以及unbuffered_row()、data_seek()等结果集方法。新增全新的Encryption 库取代不安全的 Encrypt 库新增 Redis、Wincache 缓存驱动与increment()/decrement()原子操作。新增composer_autoload配置、cookie_httponly配置、log_file_permissions配置。Routing 支持多级控制器目录、HTTP 动词路由、回调路由、translate_uri_dashes保留路由。大量 deprecated API 移除SHA1 库、EXT 常量、$autoload[core]、standard_date()等。该版本还沉淀了一批后来被 3.2.0 沿用至今的 Helper 能力html_escape()公共函数、url_title()增强、force_download()新增 MIME 开关与 NULL 读取模式、CAPTCHA 的word_length/pool/colors/font_size等选项。4.2 3.0.1 – 3.0.62015-20163.0.1hash_pbkdf2()兼容函数加入 DoS 缓解mysqli/pdo_mysql 支持 SSL 连接url_title()支持 Unicode。3.0.2修复一批xss_clean()攻击向量base_url()/site_url()支持协议相对 URL。3.0.3base_url()为空时回退$_SERVER[SERVER_ADDR]防 Host 头注入CAPTCHA 使用系统 PRNG。3.0.4安全随机数全面拥抱 PHP 7 的random_bytes()oci8 支持 Oracle 12c 的OFFSET-FETCH。3.0.5insert_batch()/update_batch()新增$batch_size参数默认 100。3.0.6Cache memcached 驱动新增析构函数确保连接关闭Form Validation 废弃prep_for_form()。五、2.x 与 1.x历史遗产中的现代基因虽然 3.x 已全面重构但 2.x/1.x 时代的许多设计至今仍能在此仓库中看到影子2.2.0Session 库以 HMAC 认证替代 MD5 校验和Encrypt 库移除xor_encode()。2.1.0新增 CUBRID 与 PDO 数据库驱动新增 Migration 库对应 system/libraries/Migration.phpinsert_batch()支持 OCI8SMTP 支持 TLS/SSL。2.0.0移除 PHP 4 支持要求 5.1.6移除 Scaffolding 与 Plugins引入 Drivers 特殊库类型对应 system/libraries/Driver.php新增 CSRF 防护与 Security 库Cache 驱动APC/memcached/file诞生application 目录移出 system。1.7.2 / 1.7.0引入 Cart 库、新 Form Validation 库escape_like_str()、reconnect()等数据库能力出现Profiler 支持多数据库连接。1.3引入 Models 支持Active Record 大规模重构JOIN 等CI_ 前缀统一规范get_instance()全局函数诞生。Beta 1.02006-02-28首个公开发布版本。这些旧版本条目说明CI 的现代核心Query Builder、Security、Session 驱动化、缓存抽象并非一蹴而就而是在 1.x 的 Active Record Helper 体系上渐进演化而来。六、升级实战把 Changelog 变成迁移清单基于上述变更日志面向从 2.x 或旧 3.x 升级的开发者可归纳出四条硬性检查线配置项核对对照 application/config/config.php确认log_file/log_filename、cookie_samesite、sess_samesite、csrf_regeneration等新项已就位删除global_xss_filtering、rewrite_short_tags、log_file_extension等已移除项。API 替换is_cli_request()→is_cli()$this-router-fetch_class()→$this-router-classdo_hash()/read_file()/trim_slashes()等一律改用 PHP 原生函数表单验证的prep_for_form规则改为html_escape()。数据库层确认 Query Builder 无法再被禁用where_in()第二参数必须是数组若使用 OCI8 注意stored_procedure()已移除。会话与安全升级到 3.1.12 以获得use_strict_mode修复与 SameSite 支持Session 数据存储不再支持 cookie 方式确认sess_driver配置。七、结语一份可当作源码索引的版本地图changelog.rst 的价值不仅在于追溯历史文档中每一行变更都对应着 system/ 与 application/config/ 中真实存在的实现。本文通过valid_macForm_validation.php、having_in()系列DB_query_builder.php、Session PHP8 包装类Session.php、Cache 驱动白名单Cache.php等源码锚点展示了日志 → 源码的交叉验证方法。当你在升级 CI 3.x 应用或排查疑难问题时这份 Change Log 就是你定位行为的权威索引。【免费下载链接】CodeIgniterOpen Source PHP Framework (originally from EllisLab)项目地址: https://gitcode.com/gh_mirrors/co/CodeIgniter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考