CodeIgniter 3.1.7服务器报错:Class 'MY_Controller'未找到
我之前也碰到过一模一样的坑!结合你描述的情况——本地开发完全正常,服务器端才报这个错,而且subclass_prefix配置正确、MY_Controller.php也放在了application/core目录,大概率是服务器环境的特性导致的,给你几个实操性的排查和解决方向:
检查服务器文件系统的大小写敏感性
本地Windows/macOS默认是大小写不敏感的,但Linux服务器是严格区分大小写的!确认你的核心子类文件名是严格的MY_Controller.php,别写成my_controller.php、My_Controller.php这类变体——CodeIgniter加载核心子类时会严格匹配文件名,这是最常见的服务器端踩坑点。验证配置文件是否真的生效
有时候部署服务器时,旧的config.php没被覆盖,或者缓存导致配置没更新。可以在Posts.php的开头加一行调试代码:var_dump($this->config->item('subclass_prefix')); exit;访问页面看看输出是不是
string(3) "MY_",如果不是,重新上传正确的config.php文件,或者清理服务器的缓存(比如OPcache)。检查文件和目录权限
服务器上的Web进程(比如www-data用户)可能没有读取application/core/MY_Controller.php的权限。把文件权限设置为644,目录权限设置为755,确保Web服务器能正常读取这个文件。确认本地和服务器的CI版本一致
如果本地用的是CodeIgniter 3,服务器却是CI2,或者反过来,核心子类的加载机制可能有差异。对比两边的CI版本,确保版本一致,避免版本兼容问题。手动引入核心子类(临时调试)
要是上面的方法都没解决,可以在Posts.php的开头手动引入MY_Controller.php,测试是不是自动加载机制出了问题:require_once APPPATH . 'core/MY_Controller.php'; class Posts extends MY_Controller { // ...你的代码 }如果这样能正常运行,说明服务器的PHP
include_path配置有问题,或者CodeIgniter的核心加载逻辑被意外修改了,需要进一步排查PHP环境配置。
内容的提问来源于stack exchange,提问作者user3087000

