Codeigniter3本地登录正常,部署到域名后报错求助
问题原因分析
1. 模型加载失败(核心诱因)
错误Undefined property: Login::$login直接说明Login控制器中尝试访问的$this->login属性未初始化,本质是Login_model模型未成功加载,进而导致调用getDefaultValues()时对象为null,触发第二个错误。具体常见原因如下:
(1)文件名/类名大小写不匹配
本地Windows环境不区分文件大小写,但服务器多为Linux/Unix系统,严格区分大小写:
- 若模型文件名是
login_model.php(全小写),但控制器中加载时用$this->load->model('Login_model'),Linux下会找不到文件; - 若模型类名写成
login_model(全小写),而非规范的Login_model,也会导致加载失败。
Codeigniter 3规范要求:模型文件名需与类名一致,首字母大写(如Login_model.php对应类class Login_model extends CI_Model {}),加载时建议使用小写模型名:$this->load->model('login_model'),或指定别名:$this->load->model('login_model', 'login')(这样才能通过$this->login访问)。
(2)模型加载的别名错误
若控制器中通过别名login访问模型,需确认加载代码是否正确:
正确写法:
$this->load->model('Login_model', 'login')
如果漏写别名参数,默认属性名是$this->login_model,而非$this->login,直接访问$this->login就会触发未定义属性错误。
(3)模型文件路径或权限问题
- 检查服务器上模型文件是否存在于
application/models/目录下,若放在子目录需在加载时指定路径(如$this->load->model('auth/Login_model')); - 确认服务器上模型文件的权限是否为可读(通常设置为
644),权限不足会导致PHP无法读取文件内容。
2. MY_Controller的潜在影响
若自定义MY_Controller中存在全局模型加载逻辑,需检查:
- 是否在MY_Controller中错误覆盖了模型加载方法;
- 是否在Login控制器继承MY_Controller时,父类构造函数未调用
parent::__construct(),导致CI核心功能未初始化。
排查步骤
- 先核对服务器上
application/models/下的模型文件名、类名与本地是否一致,确保大小写完全匹配; - 确认Login控制器中模型加载代码的别名是否正确,示例:
// 确保加载时指定了别名'login' $this->load->model('Login_model', 'login'); - 查看服务器的PHP错误日志,获取更详细的加载失败原因;
- 在控制器构造函数中添加
var_dump($this->login),直接输出模型对象状态,确认是否加载成功。
内容的提问来源于stack exchange,提问作者Akali
相关产品推荐
相关产品推荐

