0

我有两台相同的 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

什么可能导致差异?

4

1 回答 1

2

编辑:如果您的设置是使用or设置的,则这适用。感谢 jaydisc 让我了解这个事实。答案在于指令,该指令改为管理错误的显示。php_admin_valuephp_admin_flagdisplay_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.');
    }
}
于 2013-09-26T14:24:43.017 回答