php数组出现offset,PHP数组提示Notice:Undefinedoffset解决办法 - 米扑博客

易自珍
2023-12-01

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

参考推荐:

 类似资料: