提问人:Ryan 提问时间:1/6/2014 最后编辑:Ryan 更新时间:1/6/2014 访问量:666
CodeIgniter 应用程序中的错误报告
Error reporting in a CodeIgniter application
问:
更简短的解释:
我意识到我发布这是一个非常冗长的解释 - 我在下面留下了之前的解释,但添加了一个较短的摘要。
在我的 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.php
error_reporting(0)
答:
似乎只有当另一个库在相关库之前加载时,它才会发生在一个库中。
导致问题的库是 PHPGrid,它设置为 1。display_errors
评论