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 之间的区别

php中codeigniter中的应用程序路径

Codeigniter 应用程序中的 API 集成

codeigniter 中的数据库错误 1054

新应用程序中的codeigniter应用程序视图文件夹位置问题

无法访问 CodeIgniter 资产文件夹中的 CSS 文件,显示 404 错误