【问题标题】:Error reporting in a CodeIgniter applicationCodeIgniter 应用程序中的错误报告
【发布时间】: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 库加载的?

【问题讨论】:

    标签: php codeigniter error-reporting


    【解决方案1】:

    似乎只有在相关库之前加载另一个库时才会在库中发生这种情况。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 2013-10-05
      • 2010-09-19
      • 2015-04-23
      • 2012-06-16
      • 2012-05-22
      相关资源
      最近更新 更多