众所周知,在php中,如果调用一个不存在的数组的key,会有notice提示,如果开启了display_errors => On,则会输出该notice提示

notice: undefined index: --------

然而,印象中偶尔会直接抛异常,阻断程序的运行

 ErrorException  : Undefined index: category_template

那么什么时候会是error呢?什么时候又是notice呢?

  • 是否和php版本有关?

于是用 5.4、5.5、5.6、7+ 几个不同版本的php简单试了下

$a = array();
echo $a['test'];
//null

均返回null,没有任何异常,和我们想的一毛一样。
那么,确定和php版本无关

  • 到底异常是谁抛的?

仔细看了下error信息,来自Illuminate\Foundation\Bootstrap\HandleExceptions::handleError
想起来貌似只有在使用laravel框架时碰到的,第一时间想到的是laravel框架对notice级别的错误抛出异常

找到相应代码

public function handleError($level, $message, $file = '', $line = 0, $context = [])
{if (error_reporting() & $level) {throw new ErrorException($message, 0, $level, $file, $line);}
}

很明显,和预想的一样。于是打印下当前我的error_reporting()结果

echo error_reporting();
// -1 (即所有错误类型 E_ALL)

在来看下php.ini的配置信息

$ cat /yourpath/php.ini |grep error_reporting
error_reporting = E_ALL & ~E_NOTICE
//这里注意到依旧是排除了 notice 了,但是//或者
$ php -i |grep error_reporting
error_reporting => 32759 => 32759

这里注意这个32759不是任何的error等级常量,而是按位与来的
php -r ‘echo E_ALL & ~E_NOTICE | E_STRICT;’ # should return 32759
另外提一句PHP 5.3中的值为22527,PHP 5.4中的值为24575

至此,产生的原因就找到了,那么解决办法可以通过以下方法:

  • index.php 入口文件中设置错误等级
error_reporting(E_ERROR);
  • 修改php.ini文件中的对php错误等级的设置
$ vim /yourpath/php.ini
error_reporting = E_ERROR

但其实以上两种方式都无法很有效的解决问题,因为在框架运行过程中,会有在某些过程中会执行 error_reporting(-1); 的操作(可以全局搜索一下),所以php.ini的原本的设置实际到你代码运行的位置已经不一致了,而如果在index.php文件等初始位置加上error_reporting(E_ERROR);,在中途也会被重置成all,不过可以在具体的代码置调用,比如某个控制器中等等。不过还是建议通过isset()等更加规范的方法避免此类问题。

以上,是个人整理,希望对大家有帮助。

关于php中Undefined index报错不是notice而是error的问题相关推荐

  1. php注册登录遍写入 遍验证,在文件指定行中写入内容的php...-自动注册登录验证机制的php代...-php中出现Undefined index报错的修复方法_169IT.COM...

    在phpwind站点后台添加"广告管家"(CNZZ的一款广告投放的应用)的应用,整个"广告管家"通过iframe载入,载入的具体内容根据不同站点显示针对该站点的 ...

  2. 关于PHP中如何跟踪报错的手段

    PHP中发生报错,按照道理可以开启报错提示来进行报错输出: error_reporting(); ini_set('display_errors','on'); 可以查看php.ini中的配置: er ...

  3. php5.4curl报错,PHP中使用CURL报错解决方案 rip curl php curl开启 curl下

    准备使用CURL实现get和post方法时报错. Eg:CURL初始化时,报如下错误: Fatal error: Call to undefinedfunction curl_init() in C: ...

  4. python index 报错_python基础语法常见报错类型

    一.TypeError:类型错误,对象⽤来表示值的类型⾮预期类型时发⽣的错误. ### 错误例⼦: age=18 print('我的年龄是'+age) ### 报错信息:TypeError:canon ...

  5. keil 5 报错记录:..\OBJ\templiate.axf: Error: L6218E: Undefined symbol PcdHalt (referred from rc522.o).

    keil 5 报错记录:-\OBJ\templiate.axf: Error: L6218E: Undefined symbol PcdHalt (referred from rc522.o). 先来 ...

  6. AE中的各种报错提示的原因和解决方案

    转载: 建议大家找的时候直接搜索错误代码 比如 3 ::6 帖内搜索快捷键 CTRL+F 另请注意,部分错误代码的报错提示信息有两种或两种以上,如果查到的代码和你的问题不符,请继续查找本代码 3 :: ...

  7. k8s集群部署中etcd启动报错request sent was ignored (cluster ID mismatch: peer[c39bdec535db1fd5]=cdf818194e3a8c

    k8s集群部署中etcd启动报错处理 报错信息如下,主要报错信息有两条 原因是/var/lib/etcd/目录下缓存导致 解决方法 问题2: Error starting daemon: SELinu ...

  8. electron 中遇到的报错

    1. Uncaught (in promise) Error: Failed to open  . let shell = window.require("electron").s ...

  9. Pandas|Index不是datatime index报错

    1. 报错提示 Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index' ...

最新文章

  1. 执行spring boot应用三种方式
  2. Ubuntu中设置防火墙的开启与关闭
  3. Notification和Notification Manager的使用
  4. css z-index层重叠顺序
  5. VC++ 剪贴板编程
  6. Spring Boot JdbcTemplate 入门
  7. Delphi中预想不到的代码楼主zswang(伴水清清)(专家门诊清洁工)2002-05-16 14:20:38 在 Delphi / VCL组件开发及应用 提问
  8. R语言观察日志(part11)--好用的R命令之高效安装
  9. poj 3125 Printer Queue(STL注意事项)
  10. webpack4打包工具
  11. 面试题55 - I. 二叉树的深度
  12. 昆明理工津桥学院计算机,昆明理工大学津桥学院大一计算机考试试题练习
  13. SouceInsight 快捷方式查看与修改
  14. jQuery Mobile_简单的爱情故事
  15. Android利用Thread或AsyncTask进行非UI操作
  16. 可以修改Mac地址的工具WiFiSpoof for Mac
  17. 简述前端MVVM框架
  18. MySQL查询不同年份母亲节_日期习俗大不同 走近七个国家的母亲节
  19. 创维电视能用鸿蒙系统吗,鸿蒙OS系统电视怎么看直播?装了鸿蒙系统的电视可以看电视直播吗?当然可以...
  20. SpringBoot集成elasticsearch 总结

热门文章

  1. Linux驱动之i2c用户态函数调用
  2. 4-20mA电流两线制温湿度变送器工作原理
  3. 服务器安全狗怎么样?好用吗?【转载】
  4. 2020年中国皮肤科用药行业现状及竞争格局,市场需求较大「图」
  5. 辞职千万不要写离职申请,懂的人自然懂,想要快速离职,不是申请辞职,而是将自己辞职的信息上交给公司,下面是辞职模板,且看且珍惜
  6. Unable to start docker Container from docker-compose “unknown flag: iidfile”
  7. 【ubuntu】本地访问ubuntu服务器的jupyter文件,.ipynb误删除找回、恢复
  8. matlab中link函数在哪里,[分享]Matlab工具箱Excel Link之简易使用说明
  9. LINUX防火墙iptables基本命令
  10. Python编程从入门到实践:动手试一试 7-9五香烟熏牛肉卖完了