在使用数组时经常会碰到数组不存在了,导致我们珍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
// 关闭所有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); 

 

 

参考推荐

PHP 出现 Notice: Undefined index: 的几种解决方法

PHP 常见错误处理

PHP在 linux上执行外部命令

PHP 获取网页标题(title)、描述(description)、关键字(keywords)等meta信息

PHP + Selenium + WebDriver 抓取米扑科技首页

PHP 文件操作常用函数

PHP 常用函数总结(数组,字符串,时间,文件操作)

PHP 路径详解 dirname,realpath,__FILE__,getcwd

PHP 下载保存文件到本地

PHP下载远程图片

PHP抓取网站ico图标

PHP 文件导入 require, require_once, include, include_once 区别