codeigniter线上“文件名大小写错误”本质是linux区分大小写而windows不区分所致;控制器类名首字母必须大写且文件名严格一致(如quiz.php),url路由中控制器名须小写(/quiz/get_item),模型等手动引入路径也需完全匹配大小写。

CodeIgniter本地正常、线上报“文件名大小写错误”,本质是操作系统对路径敏感性的差异导致的——Linux/macOS 文件系统默认区分大小写,Windows 则不区分。你在本地(Windows)开发时用 Quiz/get_item 或 quiz/Get_Item 都能访问成功,但一上 Linux 服务器,Quiz 和 quiz 就是两个完全不同的控制器目录,直接 404。
检查控制器类名与文件名是否严格一致
CodeIgniter 要求控制器类名首字母大写,且文件名必须与类名**完全一致(含大小写)**:
- 类定义为
class Quiz extends CI_Controller→ 文件名必须是 Quiz.php(不是quiz.php或QUIZ.PHP) - 类定义为
class Api_v1 extends CI_Controller→ 文件名必须是 Api_v1.php(下划线保留,大小写不可变) - Linux 下
quiz.php和Quiz.php是两个文件,CI 加载器只认后者
验证 URL 路由中的控制器名小写规则
虽然控制器文件名必须大写,但通过 URL 访问时,CodeIgniter 默认要求控制器名在 URL 中为小写:
- 正确:
/index.php/quiz/get_item(quiz 小写) - 错误:
/index.php/Quiz/get_item(Linux 下 404) - 若启用了伪静态(.htaccess),也必须保持该小写约定:
/quiz/get_item - 检查
application/config/routes.php中是否手动写了大写路由,如$route['Quiz/(:any)'] = 'quiz/$1';—— 这类写法在 Linux 上会失效
排查自动加载或 require 的路径大小写
除控制器外,模型、库、助手等被 require 或 include 的文件同样受大小写影响:
- 模型文件
User_model.php→ 类名为User_model,加载时写$this->load->model('user_model')(小写字符串,CI 内部会转成首字母大写匹配文件) - 但如果你手动
require APPPATH.'models/User_Model.php',而实际文件是User_model.php,Linux 下就会报错 - 检查所有
require、include、require_once路径,确保大小写与真实文件名 100% 一致
统一开发与生产环境命名习惯
避免靠记忆区分,从源头约束:
- 控制器文件名:首字母大写,其余小写,如
Home.php、Api_token.php - 模型文件名:小写下划线,如
user_model.php(CI 自动映射为User_model类) - URL 访问路径:控制器部分一律小写,方法名保持下划线风格(如
get_user_list) - 上线前用命令快速检查:在项目根目录运行
find . -name "*.php" | grep -E "(Quiz|quiz|QUIZ)",确认只存在唯一正确命名的文件











