
后端Web框架【免费下载链接】CodeIgniterOpen Source PHP Framework (originally from EllisLab)项目地址https://gitcode.com/gh_mirrors/co/CodeIgniter点击查看免费下载本篇指南以官方升级文档user_guide_src/source/installation/upgrade_140.rst为骨架完整还原 CodeIgniter 从 1.3.3 升级到 1.4.0 的标准三步流程替换系统目录、更新config.php新增enable_hooks与permitted_uri_chars两个关键配置项、同步用户指南。文中将结合当前仓库中 URI.php、Hooks.php 与 config.php 的源码实现深入讲解这两个配置项的底层工作原理帮助你既完成升级动作又真正理解其安全与扩展语义。升级前须知与准备工作官方升级文档user_guide_src/source/installation/upgrade_140.rst明确指出本指南的升级路径假设你的站点当前运行的是1.3.3 版本如果你尚未升级到 1.3.3请先完成该版本的升级再执行本指南。在开始任何文件替换之前文档强烈建议先执行一个安全操作将站点下线——用一个静态的index.php文件临时替换原有的入口文件避免升级过程中用户访问到不一致的应用状态。此外升级涉及大量系统文件的覆盖文档特别提醒如果你在这些文件夹中有任何自定义开发的文件请先为它们制作副本。这是一条通用的升级铁律system/目录在 1.4.0 之后仍是框架核心所在任何直接修改过核心文件的开发者都应先备份防止被新版文件覆盖后丢失改动。Step 1替换 CodeIgniter 系统文件升级的第一步是使用 1.4.0 的新版本替换system文件夹中的以下目录与文件待替换对象说明application/config/hooks.php新增的 Hooks 定义文件1.4.0 引入的新特性application/config/mimes.php新的 MIME 类型配置文件1.4.0 将其从 Upload 类中独立出来codeigniter核心引导相关文件drivers数据库驱动helpers辅助函数库init初始化相关代码language语言文件libraries核心类库scaffolding脚手架scaffold功能这些目录在升级时需整体替换为 1.4.0 的对应版本。其中两个文件值得特别关注因为它们正是 1.4.0 版本架构调整的直接产物hooks.php1.4.0 新增的 Hooks钩子特性需要一个集中定义文件。在当前仓库中application/config/hooks.php 仍然保留了这一职责其头部注释明确写着此文件允许你定义 hooks 来扩展 CI 而无需篡改核心文件并定义了$hook数组作为钩子定义载体。mimes.php根据 changelog.rst 的 1.4.0 发布记录MIME 类型数组被从 Upload 类中移出独立成application/config/下的配置文件。当前仓库中的 application/config/mimes.php 正是这一架构调整的延续。Step 2更新 config.php —— 新增 enable_hooks 配置项打开application/config/config.php按照文档要求新增以下配置块/* |-------------------------------------------------------------------------- | Enable/Disable System Hooks |-------------------------------------------------------------------------- | | If you would like to use the hooks feature you must enable it by | setting this variable to TRUE (boolean). See the user guide for details. | */ $config[enable_hooks] FALSE;该配置项是 1.4.0 引入的 Hooks 特性的总开关。其底层实现可在当前仓库的 system/core/Hooks.php 中验证Hooks类的构造函数会首先检查这一配置当enable_hooks为FALSE时直接返回不再加载任何钩子定义// If hooks are not enabled in the config file // there is nothing else to do if ($config-item(enable_hooks) FALSE) { return; }只有当该配置为TRUE时Hooks类才会加载application/config/hooks.php及其环境变量版本application/config/ENVIRONMENT/hooks.php并检查$hook数组以完成钩子的注册。从整个框架的启动流程看Hooks类由 system/core/CodeIgniter.php 通过load_class(Hooks, core, $CFG)实例化属于框架每次请求都会初始化的核心组件。因此在 1.4.0 升级中正确新增此配置项是 Hooks 特性能够被识别的前提如果缺少它$config-item(enable_hooks)返回NULL钩子将不会被加载。配置要点取值为布尔类型FALSE默认表示关闭TRUE表示开启只有在需要利用钩子机制扩展框架如pre_system、post_controller_constructor等执行点时才应设为TRUE开启后需要配合 application/config/hooks.php 中定义的$hook数组使用。Step 2更新 config.php —— 新增 permitted_uri_chars 配置项文档要求新增的第二个配置项是permitted_uri_chars用于控制 URL 中允许出现的字符集/* |-------------------------------------------------------------------------- | Allowed URL Characters |-------------------------------------------------------------------------- | | 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 | 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!! | */ $config[permitted_uri_chars] a-z 0-9~%.:_-;这一配置项的意义需要从 1.4.0 的架构调整来理解根据 changelog.rst1.4.0 将允许的 URI 字符列表从 Router 类中移出放进了配置文件。换言之升级前该规则是硬编码在 Router 类里的升级后它变成了可配置项这也正是升级文档要求手动添加它的原因——旧的config.php中并不存在这个键。当前仓库中的完整实现application/config/config.php对取值做了更详细的注释指出了三点关键语义该值本质上是正则表达式的字符组实际执行时会被拼装为! preg_match(/^[permitted_uri_chars]$/i, $str)留空意味着允许所有字符——官方注释用only if you are insane除非你疯了来强调其危险性CLI 请求会忽略此配置。底层校验逻辑位于 system/core/URI.phpURI类构造函数在非 CLI 且非 query string 模式下读取permitted_uri_chars配置存入$_permitted_uri_chars属性然后在filter_uri()方法中执行字符组校验public function filter_uri($str) { if ( ! empty($str) ! empty($this-_permitted_uri_chars) ! preg_match(/^[.$this-_permitted_uri_chars.]$/i.(UTF8_ENABLED ? u : ), $str)) { show_error(The URI you submitted has disallowed characters., 400); } }可见只要 URL 中出现字符组之外的字符框架就会以 400 状态码返回The URI you submitted has disallowed characters.警告。1.4.0 还顺带新增了对 URL 中%字符的支持同样记录于 changelog这正反映在默认字符组a-z 0-9~%.:_-中的%上——因为 URL 编码后的字符会以百分号形式出现在 URI 中。配置要点默认值为a-z 0-9~%.:_-建议保持最小字符集以降低注入风险如需放行中文、emoji 等字符可追加对应字符组如\x{4e00}-\x{9fa5}但需充分评估安全影响留空则完全关闭该校验仅在特殊场景下使用该配置对 CLI 请求不生效。Step 3更新本地用户指南升级文档的最后一步是替换本地用户指南副本使用与 1.4.0 版本配套的新版指南。这一步骤保证你查阅的文档与当前运行的框架版本一致避免因文档滞后而误用已变更或已废弃的 API。本仓库中用户指南的源文件位于 user_guide_src/source其中 general/hooks.rst 详细讲解了 1.4.0 新增的 Hooks 特性。附1.4.0 版本新特性速览升级后值得立即体验根据仓库中的 changelog.rstCodeIgniter 1.4.0 发布于 2006 年 9 月 17 日除本文涉及的两个配置项外还包含以下重要变化新增 Hooks 特性可在不修改核心文件的前提下介入框架内部执行流程控制器支持放入子文件夹组织管理路由规则支持正则表达式控制器内支持_remap函数调用重映射支持用自定义类替换核心系统类URL 中支持%字符anchor()辅助函数支持完整 URLfile_write()新增模式参数Postgres 驱动支持自定义端口等大量 Bug 修复包括路由贪婪匹配、XSS 过滤改变大小写、会话、数据库绑定值等若干问题。升级完成后建议对照 changelog.rst 中的完整条目逐一验证受影响的功能模块并重点回归测试 URL 路由、文件上传涉及 mimes.php 的调整以及所有使用钩子的自定义扩展。升级自检清单检查项验证方式系统目录已全部替换确认system/下 codeigniter、drivers、helpers、init、language、libraries、scaffolding 均为 1.4.0 版本自定义文件已备份覆盖前已复制application/config/hooks.php、application/config/mimes.php等中的自定义改动config.php已新增配置搜索enable_hooks与permitted_uri_chars是否存在于 application/config/config.php钩子功能符合预期将enable_hooks设为TRUE并在 application/config/hooks.php 定义测试钩子观察是否触发URL 字符校验正常访问包含非法字符如中文路径的 URL确认返回 400 警告用户指南已同步本地文档版本与 1.4.0 对应赞分享后端Web框架【免费下载链接】CodeIgniterOpen Source PHP Framework (originally from EllisLab)项目地址https://gitcode.com/gh_mirrors/co/CodeIgniter点击查看免费下载相关推荐CodeIgniter 1.4.1 升级至 1.5.0 完整指南配置文件变更与查询缓存原理解析CodeIgniter 1.4.1 升级至 1.5.0 完整指南配置文件变更与查询缓存原理解析 本指南以 CodeIgniter 官方升级文档 upgrade后端Web框架CodeIgniter 1.5.4 升级至 1.6.0 完整指南核心文件替换与配置迁移详解CodeIgniter 1.5.4 升级至 1.6.0 完整指南核心文件替换与配置迁移详解 本篇技术指南以 CodeIgniter 官方 1.6.0 升级文档后端Web框架CodeIgniter 1.5.3 升级至 1.5.4 完整指南charset 配置与语言文件自动加载实战CodeIgniter 1.5.3 升级至 1.5.4 完整指南charset 配置与语言文件自动加载实战 导读 本文基于 CodeIgniter 官方用户指后端Web框架上一篇Broadway项目构建Elixir高并发数据处理管道的终极指南下一篇JPEGView图像查看器安装与使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考