CodeIgniter白屏无提示,首要确认display_errors是否开启:将index.php中ENVIRONMENT改为'development',并在require_once前添加error_reporting(E_ALL)、ini_set('display_errors','1')及'display_startup_errors','1';若仍白屏,检查PHP版本、扩展加载、BOM字符、日志权限与数据库连接。

CodeIgniter 白屏且无任何错误提示,基本就是 display_errors 被关了,或者错误压根没走到 PHP 层就静默失败了。必须分两步查:先让错误“露出来”,再看它到底是什么。
确认并强制开启 display_errors 与 error_reporting
CodeIgniter 默认在 'production' 环境下会关闭错误显示,哪怕你改了 php.ini 也可能被框架覆盖。
- 打开项目根目录的
index.php,找到define('ENVIRONMENT', ...)这一行,把它临时改成define('ENVIRONMENT', 'development'); - 紧接着在这行下面加三行(位置很重要,必须在
require_once框架引导文件之前):error_reporting(E_ALL); ini_set('display_errors', '1'); ini_set('display_startup_errors', '1'); - 如果改完还是白屏,说明可能连
index.php都没执行到——检查 Web 服务器是否真在跑 PHP,比如在index.php最顶部加die('PHP running');看是否输出 - Linux 下还要确认
php.ini中log_errors = On且error_log指向可写路径,否则错误可能被丢进黑洞
排查 BOM、空格和输出缓冲干扰
CodeIgniter 对输出极其敏感,<?php 前多一个空格、UTF-8 BOM、或配置文件末尾多一行,都会导致 headers already sent 错误,而这个错误在 display_errors = Off 时直接变白屏。
- 用 VS Code 打开
index.php、app/Config/Constants.php、app/Config/Database.php,启用 “Show All Characters” 插件,确认<?php是文件第一个字符,前面没有U+FEFF或空格 - 运行命令扫描整个项目:
grep -rl $'\xEF\xBB\xBF' .(macOS/Linux),找到含 BOM 的文件后用编辑器另存为 “UTF-8 无 BOM” - 检查所有
config/目录下的 PHP 文件,确保末尾没有空行或空格——尤其是Database.php结尾的?>后不能有任何字符 - CI4 中若用了自定义中间件或服务提供者,在
app/Services.php里 echo 或 var_dump 也会提前触发输出,导致后续框架报错不显示
验证框架核心加载是否卡在 autoload 或扩展缺失
白屏不一定来自业务代码,更可能是框架启动阶段失败,比如自动加载了不存在的类,或 PHP 缺关键扩展。
- 在
index.php最顶部插入:die('PHP version: ' . phpversion() . ', extensions: ' . implode(',', get_loaded_extensions()));刷新页面,确认 PHP 版本(CI4 至少要 8.0)、mbstring、curl、json、pdo都在列表里 - CI2/CI3 用户特别注意:
application/config/autoload.php里如果写了$autoload['libraries'] = array('database');但 MySQL 扩展没装,就会白屏且不报错;可临时清空该数组测试 - CI4 用户检查
app/Config/Autoload.php的psr4映射路径是否拼错,比如App\指向了不存在的app/目录,会导致Class App\Controllers\Home not found静默失败 - Apache 用户检查
.htaccess是否误启用了php_flag display_errors off,Nginx 用户确认fastcgi_param PHP_VALUE "display_errors=on";已写入 server 块
绕过框架直查日志和数据库连接
很多错误根本不会出现在页面上,而是记在日志里,或在尝试连接数据库时才暴露。
- CI4 日志默认在
writable/logs/,按日期生成log-YYYY-mm-dd.php;CI3 在application/logs/;用tail -f实时监听最新日志,刷新页面看有没有新条目 - 手动写个最小测试控制器(如
app/Controllers/Test.php),只做一件事:public function index() { $db = \Config\Database::connect(); return 'DB connected: ' . ($db ? 'yes' : 'no'); }如果返回空白,说明数据库扩展没加载或配置语法错(比如'port' => ''写成'port' => null) - Linux 下检查日志目录权限:
chmod -R 775 writable/(CI4)或chmod -R 775 application/logs/(CI3),权限不足时日志写不进去,错误就彻底消失 - 如果所有手段都试过仍白屏,把
index.php里require_once FCPATH . 'vendor/autoload.php';下一行加上var_dump(class_exists('CodeIgniter\CodeIgniter'));,确认 Composer 自动加载是否生效
最常被忽略的是:你以为开了 display_errors,其实框架环境常量、Web 服务器配置、甚至 IDE 自带的 PHP 内置服务器,都在暗中覆盖它。每次怀疑白屏,第一反应不该是翻代码逻辑,而是用 die() 和日志路径把执行流“钉”在某一行,看它到底死在哪一步。

















