CodeIgniter 应用程序中的错误报告

Error reporting in a CodeIgniter application

提问人:Ryan 提问时间:1/6/2014 最后编辑:Ryan 更新时间:1/6/2014 访问量:666

问:

更简短的解释:

我意识到我发布这是一个非常冗长的解释 - 我在下面留下了之前的解释,但添加了一个较短的摘要。

在我的 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。

当我更改用户名/密码以使其故意不正确时,我发现 PHP 通知正在从 NuSoap 类输出 - 但是我的错误报告级别设置为 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 库的单独控制器中,我在索引函数中放置了以下代码:

$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打开 - 为什么它们没有在这里输出?

为了抑制 中生成的错误,我发现放在文件的顶部可以做到这一点。我不明白的是,为什么 CodeIgniter 中的错误报告配置不会影响这个文件,即使它是由 CodeIgniter 库加载的?nusoap.phperror_reporting(0)

PHP codeigniter 错误报告

评论


答:

1赞 Ryan 1/6/2014 #1

似乎只有当另一个库在相关库之前加载时,它才会发生在一个库中。

导致问题的库是 PHPGrid,它设置为 1。display_errors