十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CodeIgniter 3.1.6 升级到 3.1.7 完整指南:系统文件更新与 CAPTCHA Helper 参数弃用处理

CodeIgniter 3.1.6 升级到 3.1.7 完整指南:系统文件更新与 CAPTCHA Helper 参数弃用处理 CodeIgniter 3.1.6 升级到 3.1.7 完整指南系统文件更新与 CAPTCHA Helper 参数弃用处理【免费下载链接】CodeIgniterOpen Source PHP Framework (originally from EllisLab)项目地址: https://gitcode.com/gh_mirrors/co/CodeIgniterCodeIgniter 3.1.7发布于 2018 年 1 月 13 日是一次以兼容性与行为规范为主的小版本升级官方升级指南仅包含两步操作整体替换system/目录文件以及处理 CAPTCHA Helper 中create_captcha()函数多余参数的弃用问题。本文以官方升级文档 upgrade_317.rst 为核心骨架结合 captcha_helper.php 源码与 changelog.rst 中的变更记录完整讲解升级步骤、弃用细节、新旧写法对照以及本次版本发布的完整变更清单帮助你安全、平滑地完成升级。升级前的必要准备让站点先进入离线状态官方文档明确强调执行更新之前应先将站点下线。推荐做法是临时用一份静态的index.php替换掉应用入口文件。之所以要求这样做是因为本次升级需要整体替换system/目录下的框架核心文件。如果替换过程中站点仍处于运行状态PHP 脚本在任意时刻都可能加载到「新旧文件混用」的组合——例如新版本的CodeIgniter.php配合旧版本的Loader.php——从而引发难以排查的运行时错误。用静态文件顶替入口页可以保证在文件替换期间不会有任何请求真正进入框架执行流程。具体操作可概括为将现有入口文件index.php备份如复制为index.php.bak用一份只输出静态提示如 Site under maintenance的 HTML 文件替换index.php完成下述所有升级步骤并验证无误后再恢复原入口文件。Step 1替换 system/ 目录下的全部框架文件升级的第一步也是最核心的一步用 3.1.7 版本的文件替换你项目system/目录下的所有文件和子目录。官方文档同时给出了一条重要的注意事项如果你在这些目录中开发过任何自定义文件请务必先为它们制作副本。也就是说升级前必须自查system/目录中是否存在自己改写或新增的文件——例如修改过的system/core/核心类、扩展过的数据库驱动、自定义 helper 等。这类文件一旦被整目录覆盖就会丢失因此先备份是保障安全的底线。需要说明的是官方指南只要求替换system/目录application/目录控制器、模型、视图、配置等属于你的应用代码不在替换范围内也不会被本次升级改动。如果你此前对system/做过二次开发升级后需要将你的自定义修改重新合并到新版本文件之上。仓库中的system/目录即 3.2.0-dev 开发版骨架见 system/core/CodeIgniter.php 中的CI_VERSION常量其结构与 3.1.x 系列保持一致可作为了解框架文件组织方式的参考核心类位于system/core/数据库驱动位于system/database/标准 helper 位于system/helpers/库组件位于system/libraries/。Step 2移除 create_captcha() 的多余参数用法弃用处理本次升级文档中唯一涉及代码改动的部分是 CAPTCHA Helper 中create_captcha()函数的参数用法调整。弃用的具体内容在 3.1.7 之前含 3.1.6create_captcha()除了第一个参数$data配置数组之外还允许将img_path、img_url、font_path三个选项分别作为第 2、3、4 个位置参数传入。这种「位置参数」用法在 3.1.7 中被正式标记为已弃用deprecated。从 system/helpers/captcha_helper.php 的源码可以看到函数签名本身就是单一参数function create_captcha($data)旧的位置参数兼容逻辑体现在函数体开头对$$key可变变量的回退处理上即当$data不是数组时尝试读取同名变量。这正解释了为什么旧代码能通过位置参数工作也说明了为什么官方要推动大家放弃这种用法——它偏离了统一的数组传参约定也让函数签名与文档描述不一致。新旧写法对照旧写法已弃用仅兼容保留$this-load-helper(captcha); $cap create_captcha( array(word Random word), // $data ./captcha/, // img_path第 2 参数 http://example.com/captcha/, // img_url第 3 参数 ./path/to/fonts/texb.ttf // font_path第 4 参数 );新写法推荐统一放入第一个数组参数$this-load-helper(captcha); $vals array( word Random word, img_path ./captcha/, img_url http://example.com/captcha/, font_path ./path/to/fonts/texb.ttf, img_width 150, img_height 30, expiration 7200, word_length 8, font_size 16, img_id Imageid, pool 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ, // 白色背景和边框、黑色文字、红色网格 colors array( background array(255, 255, 255), border array(255, 255, 255), text array(0, 0, 0), grid array(255, 40, 40) ) ); $cap create_captcha($vals); echo $cap[image];重要说明旧功能仍然可用但请尽快迁移官方文档特别强调被弃用的功能在 3.1.7 中仍然可用弃用只是「强烈建议尽快移除其使用」并不会在本次升级中立即报错或失效。这意味着升级到 3.1.7 后旧的位置参数调用方式暂时不会崩溃可以正常工作但弃用标记意味着它可能在未来的主版本如 3.2.x 或 4.x中被移除因此越早完成迁移后续升级的阻力越小迁移动作本身很轻量——只需把三个位置参数挪进第一个数组参数即可不涉及业务逻辑改动。升级后值得了解的 CAPTCHA 用法要点结合 captcha_helper.rst 文档与源码新写法下有几个关键行为值得确认GD 扩展是硬性前提create_captcha()依赖 GD 图像库。若未加载 GD函数会记录错误日志并返回FALSE见 captcha_helper.phpimg_path与img_url成对使用需要将图片写入磁盘时两者都必填且img_path必须存在且可写否则返回FALSE若两者都省略则生成data:image/png;base64,...格式的内联图片见 captcha_helper.php过期清理机制写入磁盘的图片文件名是微秒时间戳函数每次生成时会按expiration默认 7200 秒即两小时清理过期 PNG见 captcha_helper.php随机词生成不传word时优先使用 PHP 7 的random_int()其次走CI_Security::get_random_bytes()最后回退mt_rand()见 captcha_helper.php返回值函数返回array(word ..., time ..., image ..., filename ...)其中time是微秒时间戳、image是完整img标签。实际落地验证码校验时通常需要把create_captcha()返回的word与time存入数据库官方给出了captcha表结构原型提交时按word ip_address captcha_time条件查询校验同时清理过期记录——完整示例可在 captcha_helper.rst 中查看。3.1.7 版本完整变更清单供升级前后对照除了上述两步操作本次升级还包含多项功能更新与 Bug 修复详见 changelog.rst升级后建议按清单回归验证相关功能功能更新General Changes表单验证库的valid_email规则改用INTL_IDNA_VARIANT_UTS46校验非 ASCII 域名Email 库对非 ASCII 域名同样改用INTL_IDNA_VARIANT_UTS46Loader 库的model()方法现在会同时记录CI_Model类加载与各模型初始化的日志Pagination 库在调用initialize()时保留此前已设置的属性Cache 库的increment()、decrement()对不存在的键会自动将条目加入缓存弃用create_captcha()除$data以外的参数用法即本文 Step 2。Bug 修复Bug fixes修复 mysqli 驱动下backup()生成错误INSERT语句的回归问题修复field_data()返回错误类型名的问题修复auto_link()无法识别 URL 末尾斜杠的问题修复count_all_results()破坏后续查询ORDER BY的回归问题修复 Query Builder 应用数据库名前缀时未考虑已转义标识符的问题修复auto_link()将www.开头的邮箱同时转换为 url 与 email 链接的问题修复$config[allow_get_array]配置缺失时默认值错误的问题修复 PHP 7 下 Session memcached 驱动锁获取的回归问题。升级完成后的验证建议完成文件替换与代码迁移后建议按以下顺序验证升级结果恢复入口文件确认站点能正常加载、无 PHP 错误日志重点回归 CAPTCHA 功能访问含验证码的页面确认图片正常生成新旧两种调用方式迁移中可临时并存均能输出图片回归上节变更清单中涉及的功能模块表单验证、Email、分页、缓存、Session、Query Builder、URL Helper 等确认无异常若后续继续升级可参考 upgrading.rst 中按版本组织的升级索引逐一阅读对应版本的升级说明例如 upgrade_318.rst。小结从 3.1.6 升级到 3.1.7 的操作成本很低备份并替换system/目录、把create_captcha()的img_path/img_url/font_path从位置参数迁移到数组参数即可。本次版本的核心价值在于推动 API 用法规范化为后续版本铺路并修复了一批数据库、URL、Session 相关的实际缺陷升级收益明确、风险可控。建议按本文步骤操作并在升级后参照变更清单完成回归测试。【免费下载链接】CodeIgniterOpen Source PHP Framework (originally from EllisLab)项目地址: https://gitcode.com/gh_mirrors/co/CodeIgniter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表