在使用数组时经常会碰到数组不存在了,导致我们珍array[100]这样时出现Notice: Undefined offset错误,下面我来给大家介绍如何解决这种问题
例如:
$array[1] = 'money.mimvp.com';
$array[2] = 'proxy.mimvp.com';
$array[3] = 'blog.mimvp.com';
echo $array[0] ;
输入结果是
Notice: Undefined offset: 1 in mimvp_money/timeline.php on line 5
解决这个问题的方法如下:
方法1:先判断,后赋值
echo isset($array[0]) ? $array[0] : '数组未定义';
这样就很好的解决这个问题了。
方法2:设置php文件头部
在php文件的最上方开头部分,加上一行:
error_reporting(0);
设置下报错级别为0,即不输出错误信息,就可以了
更多用法:
// 关闭所有PHP错误报告
error_reporting(0);
// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// 报告 E_NOTICE也挺好 (报告未初始化的变量或者捕获变量名的错误拼写)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
// 除了 E_NOTICE,报告其他所有错误
error_reporting(E_ALL ^ E_NOTICE);
// 报告所有 PHP 错误 (参见 changelog)
error_reporting(E_ALL);
// 报告所有 PHP 错误
error_reporting(-1);
// 和 error_reporting(E_ALL); 一样
ini_set('error_reporting', E_ALL);
?>
1)若想输出全部错误,可以设置成: error_reporting(E_ALL);
2)若想输出全部错误,且不输出 NOTICE提示信息,可以设置成: error_reporting(E_ALL & ~E_NOTICE);
方法3:设置 php.ini 配置文件全局性
vim /usr/local/php/lib/php.ini
修改
;error_reporting = E_ALL
;error_reporting = E_ALL & ~E_DEPRECATED
error_reporting = E_ALL & ~E_NOTICE
解释说明:日志报告,显示全部但不显示NOTICE级别(& ~E_NOTICE),~ 表示取反操作
注意:方法2和方法3,需要配置文件是能够输出错误的,否则设置了也没用
具体是查看配置文件 vim /usr/local/php/lib/php.ini
display_errors = On // display_errors 要是 On 开启的状态,若 display_errors 是 Off 则方法2 和 方法3 无效
错误日志用于调试
在用php做网站开发的时候 , 为防止用户看到错误信息,而出现的不友好界面。
一般会关闭报错,在php.ini里设置:display_errors = Off
不过在开发的时候,我们有时候需要打开错误信息。这时候,可以在php文件里设置:
ini_set("display_errors","On");
error_reporting(E_ALL);
有时候我们这样设置了 还是无法显示php里的语法错误。
这是由于php文件的语法错误导致该文件根本没有被执行,所以当然不会显示错误信息
解决方法:
假设这个php里有语法错误,你可以新建一个test.php,然后在 test.php里如下编辑:
ini_set("display_errors","On");
error_reporting(E_ALL);
include("目标文件");
这样,当你在运行test.php的时候 程序就会报其中的错误语法.
error_reporting("E_ALL") 和 ini_set("display_errors", "On")的区别?
后者 ini_set("display_errors", "On")的权限大于前者,后者是OFF的话,前者就算是E_ALL也没用。
因此,在 php 文件里,最好设置为:
ini_set("display_errors","On");
error_reporting(E_ALL); 或 error_reporting(E_ALL & ~E_NOTICE);
注:实测这么写是不对的:
ini_set("error_reporting","E_ALL");
ini_set("error_reporting","E_ALL & ~E_NOTICE");
正确写法应该是:
error_reporting(E_ALL);
error_reporting(E_ALL & ~E_NOTICE);
参考推荐: