CI项目长期可维护需嵌入代码规范:模块化目录、PascalCase控制器/下划线模型命名、小写+下划线视图;WHERE用数组防注入,更新前白名单过滤;开启XSS/CSRF/HttpOnly;生产环境关闭报错并设log_threshold=4。

要让CI框架项目长期可维护、多人协作不踩坑,必须把代码规范嵌进开发流程里——不是写完再补,而是从第一行Model类命名就开始约束。
命名与目录结构规范
CI框架本身不限制目录层级,但放任自流会导致application/下堆满混乱的controllers和models。
第一步:在application/目录下严格划分modules子目录,每个业务模块(如admin、api、user)单独建文件夹,内部保持MVC三件套齐备。
第二步:控制器类名必须用PascalCase且以_Controller后缀结尾,例如UserAuth_Controller;模型类名同理,用User_model而非usermodel或UserModel——CI自动加载机制依赖下划线分隔,错一个字符就报Class not found。
第三步:视图文件统一用小写字母+下划线命名,如user_profile.php,禁止出现空格、大写字母或连字符。CI的load->view()函数对路径大小写敏感,在Linux服务器上一旦写成UserProfile.php,本地Windows能跑通,上线即404。
数据库操作安全规范
CI的Query Builder虽能防SQL注入,但开发者绕过它直接拼接字符串的情况仍高频发生。
方法一:所有WHERE条件必须用数组传参,禁止字符串拼接
【$this->db->where('status', $input['status'])】 → 正确;【$this->db->where("status = '$input[status]'")】 → 直接触发XSS+SQL注入双风险。
方法二:批量更新时必须用set()链式调用,禁用array_merge()后直接传给update()
这一步容易忽略:若用户提交了非法字段(如is_admin),没做白名单过滤就塞进update数组,攻击者能直接提权。正确做法是先定义允许更新的字段白名单,再用array_intersect_key()裁剪输入数据。
配置与安全开关规范
CI默认关闭关键防护,靠开发者手动开启——很多线上漏洞就源于config.php里那几行被注释掉的配置。
打开application/config/config.php,将以下三项设为TRUE:
$config['global_xss_filtering'] = TRUE;
$config['csrf_protection'] = TRUE;
$config['cookie_httponly'] = TRUE;
注意:启用global_xss_filtering后,所有$_POST/$_GET数据会自动过滤,但【不能替代前端输入校验】——它只处理输出环节,恶意脚本仍可能存入数据库。必须配合xss_clean()在展示前二次清理。
错误处理与日志规范
CI默认把错误直接打屏,开发环境可以接受,生产环境必须关掉并转存日志。
修改application/config/config.php中的error_reporting设置:
开发阶段:$config['error_reporting'] = E_ALL;
生产阶段:【$config['error_reporting'] = 0;】 → 同时确保log_threshold设为4,否则错误不会写入logs/目录。
所有数据库查询失败必须用$this->db->error()捕获并记录,禁止裸写$query->result()后直接foreach——当表不存在或字段名写错时,CI返回空数组而非抛异常,不检查错误码就会静默丢失数据。

















