白屏主因是生产环境屏蔽错误输出,应先将environment设为development查看报错;再检查控制器命名、命名空间、构造函数异常及php/服务器日志。

白屏不是没报错,是错误被吞了——CodeIgniter 默认在 production 环境下完全屏蔽 PHP 错误输出,你看到的“空页面”背后往往藏着致命异常。
检查 ENVIRONMENT 配置是否为 development
打开项目根目录下的 index.php,找到类似这行代码(通常在第 56 行附近):
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'production');
如果它最终值为 'production',PHP 错误就不会打印到浏览器。临时改成:
define('ENVIRONMENT', 'development');
再刷新页面,大概率立刻看到 Parse error、Fatal error 或 Call to undefined method 类报错。
- 改完别忘了上线前切回
production,否则会暴露敏感路径和变量 - 若改了仍白屏,说明连
index.php都没执行成功——检查 Web 服务器是否真在解析 PHP,或index.php文件权限是否为 644
确认控制器类名、文件名、命名空间是否严格一致(CI4)
CI4 对大小写和命名极其敏感,一个字母错就静默失败:
- 控制器文件必须放在
app/Controllers/下,例如app/Controllers/Hello.php - 类名必须与文件名完全一致:
class Hello extends Controller,不能是hello或HelloController - 必须声明命名空间:
namespace App\Controllers;,漏掉或写成App\Controllers\(末尾多斜杠)都会导致自动加载失败 - 若用 IDE 自动生成类,注意它可能默认加了
use CodeIgniter\Controller;,但 CI4 要求的是use CodeIgniter\HTTP\ResponseInterface;和继承Controller,别混用旧版写法
检查构造函数里有没有未捕获的异常
很多白屏源于 __construct() 中加载模型、调用服务时出错,但没显式 try/catch:
public function __construct()
{
$this->model = new SomeModel(); // 如果 SomeModel 构造函数抛异常,这里直接终止,无任何输出
}
临时加一句调试输出验证是否走到这里:
public function __construct()
{
echo 'construct start'; exit; // 白屏变输出,说明问题在构造函数内
$this->model = new SomeModel();
}
- 常见陷阱:模型中用了不支持的 PHP 特性(如属性类型声明在 PHP 7.4 以下)、数据库连接配置错误、
.env文件缺失导致Database初始化失败 - CI4 的
Services::database()在构造函数里调用时,若 DB 配置无效,会静默返回 null,后续调用->table()就报Call to a member function table() on null——但这个错误也被环境设置吞掉了
查看 PHP 错误日志而不是依赖浏览器
开发机上直接看日志比等白屏更可靠:
- Apache:查
/var/log/apache2/error.log(Linux/macOS)或C:\xampp\apache\logs\error.log(Windows XAMPP) - Nginx + PHP-FPM:查
php-fpm.log和nginx/error.log,重点搜PHP Fatal error或PHP Parse error - CI4 自带日志路径是
writable/logs/,但前提是框架能跑起来;构造函数失败时日志都写不了,所以优先看 Web 服务器原生日志
真正难定位的白屏,往往卡在 autoload、Composer 加载、或扩展模块(如 mbstring 未启用)缺失——这些不会进 CI 日志,只留在 PHP 或 Web 服务日志里。











