codeigniter常见故障需分四类排查:404问题查路由与控制器命名一致性;数据库失败验配置与连接代码;未定义变量核对视图数据键名;函数调用错误修正嵌套定义及$this->语法;intl扩展缺失则修改web服务器对应php.ini并重启服务。

CodeIgniter框架运行中突然报错,页面直接显示“Database error”“Undefined variable”或“Call to undefined function”,不是删缓存就能解决的临时故障,而是数据流断裂、配置错位或语法越界引发的硬性阻断。
404页面找不到?3步快速定位
第一步:打开 application/config/routes.php,确认默认控制器是否写成小写 welcome 或拼错为 Welcom —— 【类名必须与文件名完全一致,且首字母大写】。
第二步:检查 application/controllers/Welcome.php 是否真实存在,用文本编辑器打开它,逐字核对 class Welcome extends CI_Controller 中的 Welcome 是否和文件名大小写完全匹配。
第三步:在浏览器中访问 http://localhost/your-project/index.php/welcome(注意带 index.php),如果能正常显示欢迎页,说明问题出在 .htaccess 或 Apache 重写模块未启用;若仍 404,重点复查前两步。
数据库连接失败?直接验证连接状态
方法一:在任意控制器的 index() 方法开头插入以下三行代码并刷新页面:
$this->load->database();
if ($this->db->conn_id) { echo '✅ 连接成功'; } else { echo '❌ 连接失败:' . $this->db->error()['message']; }
方法二:不改代码,直接打开 application/config/database.php,重点检查 hostname 是否写成 127.0.0.1 而不是 localhost(某些 Docker 环境下必须用 127.0.0.1);password 字段是否为空字符串但被误加了空格——【空密码必须是 '',不能是 ' '】。
视图里提示 Undefined variable?立刻查数据键名
在控制器中调用 $this->load->view('timeline', $data); 前,加一行:
echo '
'; print_r($data); exit;
浏览器会输出完整数组结构。对照视图中写的 ,确认 $data 数组里真有 'result' 这个键,且该键值不是 null 或 false —— 很多时候模型返回空结果集,$data['result'] 实际是 NULL,但视图仍强行取 key,就会爆未定义变量。?php>
如果 print_r 显示 Array ( ),说明模型没返回数据,问题不在视图,而在模型查询逻辑或数据库表里根本没对应记录。
Call to undefined function getRating()?函数不能嵌套定义
打开报错指向的模型文件(比如 Beranda_model.php),搜索 getRating 函数定义位置。如果发现它被写在另一个函数内部,例如:
public function getPost() {
function getRating() { ... } // ❌ 错误:PHP 不允许在方法内再定义函数
}
立刻剪切 getRating() 整个函数块,粘贴到类体最底部,与 getPost() 并列,并加上 public 或 private 修饰符:
private function getRating($post_id) { ... } // ✅ 正确
然后回到调用处,把原来的 getRating($id) 改成 $this->getRating($id) —— 【类内调用必须加 $this->,否则 PHP 当作全局函数找】。
intl 扩展缺失导致启动失败?只改 Web 用的 php.ini
创建一个 info.php 文件,内容只有 ,通过浏览器访问它,在页面中搜索 “Loaded Configuration File”,复制显示的完整路径(例如 /etc/php/8.1/apache2/php.ini)。?php>
用 sudo 权限编辑该文件,在 extension 部分取消注释 intl 扩展行:
;extension=intl → 改为 → extension=intl
保存后,【必须重启 Apache 或 Nginx,仅 reload 不生效】。验证方式:再次访问 info.php,搜索 “intl”,看到已启用即成功。










