CodeIgniter 应用程序中的错误报告
Posted
技术标签:
【中文标题】CodeIgniter 应用程序中的错误报告【英文标题】:Error reporting in a CodeIgniter application 【发布时间】:2014-01-23 16:51:02 【问题描述】:简短说明:
我意识到我将其发布为一个非常冗长的解释 - 我在下面留下了之前的解释,但添加了一个更简短的摘要。
在我的 CodeIgniter 应用程序中,错误报告级别设置为 0。如果我尝试在控制器或视图中引用未定义的索引(例如),则不会像预期的那样输出错误。
但是,我有一个库,它加载到第三方类 (NuSoap) 中。
如果 NuSoap 类遇到错误 - 它仍会在我的应用程序中输出错误。
如果库文件本身遇到错误,也会输出错误。
这是为什么?如果它是通过 CodeIgniter 加载的,那么它肯定应该继承错误报告级别吗?
之前的(啰嗦的)解释:
我无法理解错误报告在整个 CodeIgniter 应用程序中的工作方式。
在index.php
我的报错设置如下:
if (defined('ENVIRONMENT'))
switch (ENVIRONMENT)
case 'development':
error_reporting(E_ALL);
break;
case 'testing':
case 'production':
error_reporting(0);
break;
default:
exit('The application environment is not set correctly.');
我正在使用生产环境,所以当错误/警告/通知到期时,我的预期输出是什么都没有显示,但事实并非如此。
我花了一段时间才走到这一步,但我已经有了一些发现。
我之所以知道这一点是在测试期间。我的目标是捕获连接到我们使用的 API 的任何错误,我们使用 NuSoap 客户端连接到该 API。
当我故意更改用户名/密码以使其不正确时,我发现从 NuSoap 类输出 PHP 通知 - 但是我的错误报告级别设置为 0。
错误是 PHP 通知(未定义索引)
我有一个包含主要 NuSoap 类的库:
<?php
if(!defined('BASEPATH'))
exit('No direct script access allowed');
class NuSoap
var $nusoap_client;
public function __construct()
/* Load the NuSoap class */
require_once('../httpdocs/application/libraries/nusoap/nusoap.php');
/* Initialise the NuSoap client */
$this->nusoap_client = new nusoap_client(NUSOAP_WSDL_FILE, 'wsdl', '', '', '', '', 120, 120);
/* Set the credentials */
$this->nusoap_client->set_credentials(USERNAME, PASSWORD);
$this->nusoap_client = $this->nusoap_client->getProxy();
?>
错误来自包含的文件/application/libraries/nusoap/nusoap.php
在一个不使用 NuSoap 库的单独控制器中,我将以下代码放在 index 函数中:
$arr = array(); $arr['exists'] = true;
echo 'deliberate error - ' . $arr['not_exists'];
die(phpinfo());
现在,NuSoap 类正在输出未定义错误的通知这一事实,我也希望上面的内容如此,但事实并非如此。
另外 - 在 PHP 信息输出中,以下内容对我来说没有意义:
Directive Local Value Master Value
display_errors On On
如果 display_errors 开启 - 为什么它们不在这里输出?
为了抑制在nusoap.php
中生成的错误,我发现将error_reporting(0)
放在文件顶部可以做到这一点。我不明白的是为什么 CodeIgniter 中的错误报告配置不会影响这个文件,即使它是由 CodeIgniter 库加载的?
【问题讨论】:
【参考方案1】:似乎只有在相关库之前加载另一个库时才会在库中发生这种情况。
导致问题的库是 PHPGrid,它将 display_errors
设置为 1。
【讨论】:
以上是关于CodeIgniter 应用程序中的错误报告的主要内容,如果未能解决你的问题,请参考以下文章
CodeIgniter 错误报告 1.7.x 和 2.x 之间的区别