我有两个相同的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
可能导致差异的原因是什么?
答案 0 :(得分:2)
编辑:如果您的设置是使用php_admin_value
或php_admin_flag
设置的,则此不会。感谢jaydisc让我了解这个事实。答案在于display_error
指令,它指示错误的显示。
但是,我将在此处留下其余帖子,因为根据问题标题,如果不是php_admin_value
设置,这将是一个可能的答案。
无论您的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.');
}
}