php - CodeIgniter 似乎吞下了(而不是记录)PHP 解析错误。为什么?
问题描述
这让我发疯了。
我在我的 Centos-Apache-PHP 服务器 (PHP 7.2.6) 中安装了最新 CodeIgniter (3.1.9) 的干净副本。
在全球范围内,我的 PHP 将错误记录到 (say) /var/www/logs/php_err.log
。
PHP Parse error: syntax error, unexpected 'public' (T_PUBLIC)...
我检查是否确实在任何非 CI PHP 页面中记录了我的 PHP 错误,包括解析错误 ( )。它还会记录解析错误是否发生在require_once()
.
我还检查了在 CI 应用程序代码(控制器或模型)中,当我调用error_log("something");
.
我什至检查是否我故意破坏 CI (在打开后index.php
添加一行,解析错误出现在我的日志中。asd
<?php
问题是(比如说)控制器中的解析错误(例如,删除 中的第一个大括号application/controllers/Welcome.php
),给出一个简单的 500 错误页面,并且日志文件中没有任何内容。
通过将环境从更改为production
,development
我可以在网页中看到解析错误。但日志中仍然没有任何内容。而且,无论如何,我绝对想要日志中的错误,也在生产中!
如果我注释掉整个“ERROR_REPORTING”块,问题仍然存在index.php
为什么会这样?
解决方案
默认情况下,Codeigniter 使用自己的错误报告系统。要记录错误,请config.php
查看$config['log_threshold'];
. 变量上方有一个定义表,定义了不同的值等同于什么,但我认为这$config['log_threshold'] = 1;
将适用于您的目的(默认情况下为 0,即关闭)。如果您有不同的生产/开发文件夹,那么您应该为这两个配置文件修改此变量。默认情况下,如index.php
生产错误所示,通过此行从输出中抑制:ini_set('display_errors', 0);
.
日志将出现在application/logs/
目录中,并按Y-m-d H:i:s
.
希望这能回答你的问题。
推荐阅读
- java - 有没有办法在它为空时使用“可选”的方法“orElseGet”来创建一个新列表?
- azure-cosmosdb - 增加分区键计数对 azure cosmos db 的读取性能有什么影响
- google-cloud-platform - GCP 对象下载指标
- java - 在已实现的 Java 代码中需要有关易失性和非易失性概念的帮助?
- python - 如何删除少于 3 个字符的单词?
- python - 在原始图像上绘制点图案
- javascript - 捕获由按钮单击事件触发的 HTML 表单提交事件
- android - 点击事件永远不会在 ScrollView 中触发
- ios - 重新加载数据后更改 UIButton 文本
- qt - 将 Q_DECLARE_METATYPE 作为指针传递