CodeIgniter错误报告1.7.x和2.x之间的差异

时间:2013-09-26 03:53:51

标签: php codeigniter codeigniter-2 error-reporting

我有两个相同的Debian Squeeze服务器运行php 5.3.3-7 + squeeze17,一个运行1.7.x,另一个运行2.1.4。

在1.7安装中,当我调用一个调用未定义模型方法的控制器方法时,页面输出:

Fatal error: Call to undefined method Example_Model::get_series_and_products() in /opt/git/online_live/application/controllers/members.php on line 2549

然而,在2.1.4上根本没有输出。在未定义的函数输出文本之前插入echo语句,但之后的语句不插入。

两个站点的VirtualHost配置中都将php error_reporting设置为-1,这似乎覆盖了config.php定义的开发环境设置,它将error_reporting设置为E_ALL。

这是我用于输出的一些额外代码:

echo ini_get('error_reporting');
echo '<br>';
echo phpversion();

两者的输出相同:

-1  
5.3.3-7+squeeze17

所以,似乎没有其他任何东西可以胜过我的error_reporting。

在2.1.4的application / config / config.php中(错误未显示):

$config['log_threshold'] = 4; // All Messages

在1.7(显示错误的地方):

$config['log_threshold'] = 0;

但我认为该设置是针对CI保留的文件系统日志而不是内联错误。

phpInfo()在两台主机上反映相同的error_log值:

error_log:              no value    no value
error_reporting:        -1          22527

可能导致差异的原因是什么?

1 个答案:

答案 0 :(得分:2)

编辑:如果您的设置是使用php_admin_valuephp_admin_flag设置的,则此不会。感谢jaydisc让我了解这个事实。答案在于display_error指令,它指示错误的显示。

但是,我将在此处留下其余帖子,因为根据问题标题,如果不是php_admin_value设置,这将是一个可能的答案。

错误报告1.7.x和2.x之间的差异

无论您的error_reporting设置如何,Codeigniter都会在index.php中覆盖它。 http://php.net/manual/en/function.error-reporting.php

The error_reporting() function sets the error_reporting directive at runtime. PHP has many levels of errors, using this function sets that level for the duration (runtime) of your script.

这是因为error_reporting属于ini_set函数系列:http://php.net/manual/en/function.ini-set.php,在脚本持续时间内覆盖 php指令,包括php_admin_value

对于1.7.x,(查看旧版本http://ellislab.com/codeigniter/user-guide/installation/downloads.html),

index.php中的第一行代码是

error_reporting(E_ALL);

,无论如何都会启用错误(除非稍后通过代码更改设置)。

对于2.1.4,(https://github.com/EllisLab/CodeIgniter/blob/2.1.4/index.php),它取决于ENVIRONMENT常数:

/*
 *---------------------------------------------------------------
 * ERROR REPORTING
 *---------------------------------------------------------------
 *
 * Different environments will require different levels of error reporting.
 * By default development will show errors but testing and live will hide them.
 */

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.');
    }
}