ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

CodeIgniter Beta 1.0 到 Beta 1.1 升级指南:五步完成目录重构与配置修正

2026/9/21 3:31:00 拓冰建站 浏览量
CodeIgniter Beta 1.0 到 Beta 1.1 升级指南:五步完成目录重构与配置修正 CodeIgniter Beta 1.0 到 Beta 1.1 升级指南五步完成目录重构与配置修正【免费下载链接】CodeIgniterOpen Source PHP Framework (originally from EllisLab)项目地址: https://gitcode.com/gh_mirrors/co/CodeIgniter导读本文以 CodeIgniter 官方升级文档 user_guide_src/source/installation/upgrade_b11.rst 为主体完整还原从 Beta 1.0 升级到 Beta 1.1 的五个标准步骤替换入口文件、迁移 config 目录、替换核心目录、添加日历语言文件与修正 config 配置。Beta 1.1 是 CodeIgniter 发展史上一次重要的结构分水岭——它首次允许多应用共享同一套后端文件并引入应用级 config 目录与可配置的 URI 协议。读者读完本文将能掌握这套升级流程的每个细节并理解这些历史变更在现代版本源码中的落地形态。一、升级背景Beta 1.1 引入的关键能力在 Beta 1.0 时代CodeIgniter 的配置目录位于 system 目录之下应用与框架后端文件紧密耦合。Beta 1.1 引入了两项影响深远的架构调整多应用共享后端一个 CodeIgniter 安装可以承载多套 application它们共同复用同一组框架后端文件每套应用拥有独立的配置与业务代码应用级 config 目录为实现每套应用拥有自己的配置值config 目录必须从 system 目录迁入 application 目录。从当前仓库的目录结构可以清楚看到这两项设计的最终形态application/config 下集中存放config.php、database.php、routes.php等全部应用配置而 system 目录则纯粹承载框架核心core、database、helpers、libraries、language 等两者边界清晰。升级共分五个步骤下文逐一展开。二、Step 1替换入口文件index.php操作用新版index.php替换应用根目录下的旧文件。如果你重命名过 system 文件夹必须在替换后的新文件中同步修改对应的路径信息。入口文件是 CodeIgniter 的唯一前端控制器front controller它负责定义环境、解析路径常量并加载引导文件。在当前仓库的 index.php 中与系统目录重命名直接相关的配置项是$system_path system; $application_folder application; $view_folder ;$system_pathsystem 目录名。若重命名例如改为ci_system需在此同步修改$application_folderapplication 目录名也支持改成绝对路径$view_folder若想将 views 目录移出 application可在此指定留空则默认位于 application 内部。替换后入口文件会通过realpath()解析上述路径依次定义BASEPATH、FCPATH、SYSDIR、APPPATH、VIEWPATH等路径常量最后require_once BASEPATH.core/CodeIgniter.php拉起整个框架见 index.php。若路径配置错误入口文件会直接返回HTTP 503 Service Unavailable并提示修正。三、Step 2迁移 config 目录到 application 之下操作将原位于 system 目录下的config目录整体移动到application/config之下。这是 Beta 1.1 多应用共享后端文件架构的前提每个 application 需要持有自己的配置因此配置目录必须与应用代码同级、随应用迁移。当前仓库的 application/config 目录即是这一演进的直接产物其中包含配置文件作用config.php框架全局配置URI 协议、Cookie、Session、语言等database.php数据库连接组配置routes.php路由规则autoload.php自动加载的类库、辅助函数、配置项constants.php、hooks.php、mimes.php、user_agents.php等常量、钩子、MIME 类型、浏览器标识等专项配置迁移完成后再结合 Step 1 的入口文件APPPATH即指向application/框架的 Config、Loader 等核心组件会从APPPATH.config/读取配置仓库中 system/core/Config.php 的加载逻辑即以此为路径基础。四、Step 3替换核心目录操作用新版替换以下目录drivershelpersinitlibrariesscaffolding在 Beta 1.1 时代这些目录位于 system 之下负责数据库驱动、辅助函数、初始化逻辑、核心库与脚手架功能。对照当前仓库的 system 目录结构可以看到这些职责的现代形态drivers→ 演变为 system/database/drivers按数据库细分cubrid/、ibase/、mysql/、mysqli/、oci8/、odbc/、pdo/、postgre/、sqlite3/、sqlsrv/等每个驱动目录内含_driver.php、_forge.php、_result.php、_utility.php四个文件族helpers→ system/helpers包含array_helper.php、form_helper.php、url_helper.php、text_helper.php等 20 余个辅助函数文件libraries→ system/libraries包含Calendar.php、Email.php、Form_validation.php、Pagination.php、Session/、Cache/等核心类库init / scaffolding→ 从当前仓库结构看这两个目录在现代版本中已不存在其职责被引导流程system/core/CodeIgniter.php与 Loader/路由机制取代。替换时务必保持目录名与文件命名规范不变否则框架按约定加载类库、辅助函数时会出现找不到文件的错误。五、Step 4添加日历语言文件操作Beta 1.1 新增了与日历类Calendaring class对应的语言文件需要将其加入应用的语言目录language/english/calendar_lang.php。该语言文件在仓库中的对应实现是 system/language/english/calendar_lang.php它定义了三组以cal_为前缀的键星期缩写cal_su~cal_saSu、Mo、Tu……星期全称cal_sunday~cal_saturdaySunday、Monday……月份缩写与全称cal_jan~cal_decJan、Feb……与cal_january~cal_decemberJanuary、February……。日历类在渲染时正是通过CI_Lang读取这些键月份名称使用$this-CI-lang-line($month_names[$month])星期名称使用$this-CI-lang-line(cal_.$day_names[$i])并都在取不到翻译时回退到英文原文见 system/libraries/Calendar.php。因此若该语言文件缺失日历组件将无法按本地化语言显示星期与月份。六、Step 5修正并扩充 config 文件这是本次升级中最关键的代码级修正包含两个子任务。6.1 修复 Cookie 配置的数组名拼写错误原application/config/config.php中 Cookie 相关配置存在拼写错误——数组名误写为$conf$conf[cookie_prefix] ; $conf[cookie_domain] ; $conf[cookie_path] /;必须更正为$config$config[cookie_prefix] ; $config[cookie_domain] ; $config[cookie_path] /;在 PHP 中$conf与$config是两个互不相干的变量CodeIgniter 的 Config 类只读取$config数组若变量名错误Cookie 相关配置将全部失效。对照当前仓库 application/config/config.php这一修正后的形态为$config[cookie_prefix] ; $config[cookie_domain] ; $config[cookie_path] /; $config[cookie_secure] FALSE; $config[cookie_httponly] FALSE; $config[cookie_samesite] Lax;现代版本还额外补充了cookie_secure仅 HTTPS 下发送、cookie_httponly禁止 JS 读取与cookie_samesiteSameSite 属性取值Lax/Strict/None三个安全项。6.2 新增 uri_protocol 配置项最后向 config 文件追加全新的uri_protocol配置项用于决定框架从哪个服务器全局变量解析 URI 字符串/* |------------------------------------------------ | URI PROTOCOL |------------------------------------------------ | | This item determines which server global | should be used to retrieve the URI string. The | 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 */ $config[uri_protocol] auto;Beta 1.1 提供了三种取值auto自动探测默认、path_info使用$_SERVER[PATH_INFO]、query_string使用$_SERVER[QUERY_STRING]。auto会依次尝试各服务器全局变量直到成功解析出 URI。当前仓库中该配置的现代版本位于 application/config/config.php取值集已演化为取值含义说明REQUEST_URI使用$_SERVER[REQUEST_URI]当前默认值适用于绝大多数服务器QUERY_STRING使用$_SERVER[QUERY_STRING]适用于依赖查询字符串传递 URI 的环境PATH_INFO使用$_SERVER[PATH_INFO]注意使用此协议时 URI 总是会被 URL 解码源码级支撑URI 解析的真正逻辑在 system/core/URI.php 的构造函数中。CI_URI读取uri_protocol配置后执行分支AUTO仅为向后兼容保留与REQUEST_URI→ 调用_parse_request_uri()解析QUERY_STRING→ 调用_parse_query_string()PATH_INFO及其他取值 → 直接读取$_SERVER[$protocol]缺失时回退到_parse_request_uri()。_parse_request_uri()内部还会借助parse_url()剥离查询串、修正QUERY_STRING与$_GET并兼容 Nginx 等要求 URI 出现在查询字符串中的服务器见 system/core/URI.php。这也解释了文档中如果链接似乎不工作试试其他取值的排查思路当伪静态重写或服务器配置导致REQUEST_URI无法正确反映路径时切换到PATH_INFO或QUERY_STRING往往即可修复。七、升级完成后的验证要点完成以上五个步骤后建议按如下顺序验证升级是否成功访问站点首页确认入口文件正常引导无503 Service Unavailable检查配置加载确认application/config/config.php中的$config数组名修正生效——可临时在配置中加入一个自定键再通过$this-config-item(key)读取验证测试路由与链接若 URL 形如index.php/controller/method无法正常解析尝试切换uri_protocol为PATH_INFO或QUERY_STRING验证日历类调用$this-load-library(calendar)生成日历确认星期与月份文字正常显示依赖 Step 4 的语言文件确认多应用结构应用配置与应用代码已彻底与 system 后端分离可在入口文件 index.php 中通过修改$application_folder指向不同应用目录来验证多应用共享后端能力。八、结语一次升级两项架构基石Beta 1.0 → Beta 1.1 的五步升级表面上是文件替换与配置修正实质上奠定了 CodeIgniter 后续版本的应用/框架分离架构application与system双层结构和可配置 URI 协议两大基石。前者让多应用共享一套框架成为可能后者为框架在不同服务器环境下的 URL 兼容性提供了开关。在现代版本中这两个设计分别以 application/config 目录的独立性与 system/core/URI.php 的多协议解析机制延续至今——理解这段升级史有助于更透彻地把握 CodeIgniter 的目录约定与配置原理。【免费下载链接】CodeIgniterOpen Source PHP Framework (originally from EllisLab)项目地址: https://gitcode.com/gh_mirrors/co/CodeIgniter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考