You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP警告:call_user_func_array()回调无效,Error类无index方法求助

排查CodeIgniter部署后call_user_func_array()回调错误

我来帮你搞定这个部署后的PHP警告问题,这个错误的核心是CodeIgniter在执行call_user_func_array()时,试图调用Error类的index方法,但要么这个方法不存在,要么Error类本身就不是你自定义的控制器类。下面是具体的排查步骤:

  • 检查路由配置是否指向了错误的控制器/方法
    打开application/config/routes.php,查看默认路由或者相关自定义路由,比如$route['default_controller']是不是设置成了'error/index'。如果是,先确认你的项目里确实存在对应的Error控制器,并且里面有index方法。

  • 检查Error控制器的定义与文件名
    去application/controllers/目录下找Error.php文件,确认:

    1. 文件名首字母是大写的(CodeIgniter要求控制器文件名首字母大写);
    2. 文件里的类名和文件名完全一致,比如:
      class Error extends CI_Controller {
          public function index() {
              // 这里是你的方法逻辑
          }
      }
      
    3. 确保index方法是public权限的,否则无法被路由调用。
  • 重点排查PHP版本冲突问题
    这是最容易忽略的点:PHP 7及以上版本中,Error是PHP内置的异常类!如果你的本地环境是PHP 5,自定义Error控制器没问题,但部署到PHP 7+的服务器上时,系统会优先识别内置的Error类,而这个内置类根本没有index方法,自然会报错。
    解决办法:把你的自定义控制器改名,比如改成Errors或者MyError,然后更新路由配置里的对应项,同时把控制器文件名和类名也改成新的名称。

  • 检查服务器文件系统的大小写敏感性
    本地如果是Windows系统,文件名大小写不敏感(比如error.php和Error.php都能识别),但服务器如果是Linux系统,文件名是严格区分大小写的。如果你的路由里写的是'Error/index',但控制器文件名是error.php,Linux服务器会找不到这个控制器,进而误调用内置的Error类,导致报错。

  • 确认控制器的加载路径
    如果你的Error控制器在子目录下(比如application/controllers/errors/Error.php),路由里需要加上子目录前缀,比如$route['default_controller'] = 'errors/error/index';,否则系统会在根控制器目录里找,找不到就会出问题。

内容的提问来源于stack exchange,提问作者Krishnareddy Gorla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:30:41