codeigniter 4 错误报告需同时满足 .env 中 ci_env=development(无空格引号)、php 的 display_errors=on 和 error_reporting=e_all,缺一不可;profiler 不捕获致命错误,cli 环境需手动启用错误显示。

CodeIgniter 的错误报告不会自动弹出来,它完全依赖环境配置和 PHP 底层设置。开不开、显示不显示、显示多少,全看 ENVIRONMENT 值、error_reporting 和 display_errors 三者是否对齐——缺一不可。
ENVIRONMENT 必须设为 development
CodeIgniter 4 不读 index.php 里的 define('ENVIRONMENT', ...),只认 .env 文件中的 CI_ENV=development。如果写成 CI_ENV = "development"(带空格或引号),PHP 解析会失败,实际还是 production。
- 检查
.env是否存在且未被重命名为.env.example - 确认内容是
CI_ENV=development,不能有前后空格,也不能用单/双引号包裹 - 部署到服务器后,用
var_dump($_SERVER['CI_ENV'] ?? 'not set');临时验证是否生效 - Apache 用户注意:如果用
SetEnv CI_ENV development覆盖,需确保AllowOverride All允许.htaccess读取环境变量
error_reporting 和 display_errors 要同步开启
仅设 CI_ENV=development 不够。CodeIgniter 只是根据这个值去设置 PHP 错误级别,但最终是否显示,还得看 PHP 自身的 display_errors 配置。Nginx + PHP-FPM 环境下,这个值常被 php.ini 或 www.conf 强制关掉。
- 在控制器里加一行:
ini_set('display_errors', '1'); error_reporting(E_ALL);,可快速验证是否是配置问题 - 更稳妥的是改 PHP 配置:找到当前 PHP 使用的
php.ini,确认display_errors = On且error_reporting = E_ALL - PHP-FPM 用户额外检查
www.conf中是否有php_admin_flag[display_errors] = off,这行会覆盖所有脚本内的ini_set - CLI 环境下默认不显示错误(即使
CI_ENV=development),调试命令行脚本时得手动加ini_set('display_errors', 1)
Profiler 不等于错误报告,别混用
$this->output->enable_profiler(TRUE) 只是性能分析器,它不捕获 Parse error、Fatal error 这类解析期或执行期致命错误。这类错误必须靠 PHP 原生机制暴露,Profiler 甚至都等不到执行就挂了。
- 页面白屏且无任何输出?优先检查
error_log(Apache 的error.log或 PHP-FPM 的slowlog) - Profiler 在
production下默认禁用,但即使开了,也只显示数据库查询、加载时间等,不显示Undefined variable这类 notice/warning - 想让非致命错误也显示出来,必须确保
error_reporting包含E_NOTICE | E_WARNING,而不仅是E_ERROR - CI4 的异常页面(Whoops)只在
development下触发,且要求app/Config/Exceptions.php中$pageCache = true未被禁用
最常被忽略的是 PHP-FPM 层面的 php_admin_flag[display_errors] 覆盖,以及 .env 文件权限导致读取失败——这两个点查不到日志、看不出报错,只能靠 var_dump(getenv('CI_ENV')) 这种硬核方式定位。











