php错误异常及其排错
错误和异常
错误
php程序自身的问题,一般是由非法的语法,环境问题导致
异常
一般是业务逻辑上出现的不合预期、与正常流程不同的状况,不是语法错误
错误异常继承关系
小括号表示php版本
php7下的常见错误异常类型
| 常见错误/异常代码 | 类型 | try/catch | set_error_handler | set_exception_handler | register_shutdown_function(均触发) |
|---|---|---|---|---|---|
include/require "aaa" |
错误 | ||||
undefined() |
异常 | ||||
$arr=["a"=>1];echo $arr['b']; |
错误 | ||||
echo 1/0; |
错误 | ||||
intdiv(1,0) |
异常 | ||||
define("A",1);define("A",1); |
错误 | ||||
function a(); function a();//或者类的重复定义 |
错误 | ||||
function add($a,$b){return $a+$b;} add(1); add(1,2,3);//自动忽略了多余的 |
异常 | ||||
$a=1; foreach ($a as $k=>$v){ echo $k."--".$v; } |
错误 | ||||
include "parseError.php"; //parseError.php 有语法错误 |
异常 | ||||
$a=null; $a->fun(); |
异常 |
错误和异常的有关主要配置
log_errors //开启记录错误日志
display_errors //是否在页面展示错误日志
error_reporting //错误级别
error_log
如果该配置没有设置,则错误信息会被发送到 SAPI 错误记录器。
例如,出现nginx的错误日志中,或者在CLI中发送到 stderr
配置优先级别fpm>ini>nginx
错误/异常有关处理函数

https://www.php.net/manual/zh/ref.errorfunc.php
set_exception_handler
在exception_handler 调用后异常会中止
只能设置1个,未设置则返回NULL,再次设置返回上次的handler(5.5+),设置为NULL和restore_exception_handler()作用类似
set_error_handler
以下级别的错误不能由用户定义的函数来处理,独立于发生错误的地方: E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、 E_COMPILE_ERROR、 E_COMPILE_WARNING,和在 调用 set_error_handler() 函数所在文件中产生的大多数 E_STRICT
如果错误发生在脚本执行之前,将不会 调用自定义的错误处理程序因为它尚未在那时注册
传入 null 重置处理程序到默认状态,同restore_error_handler()
handler里error_types 里指定的错误类型都会绕过 PHP 标准错误处理程序, 除非回调函数返回了 false
如果handler返回 false,标准错误处理处理程序将会继续调用
register_shutdown_function
不影响error_log的行为,可以多个
Yii里的异常和错误处理
- 出现错误-> 触发->错误的处理handler->错误处理handler抛出异常-》触发异常处理的hander->写日志/格式化输出
- 出现异常->触发异常处理的hander→写日志/格式化输出
- 出现fatal错误→触发 register_shutdown_function的handler->写日志/格式化输出
常见的查错
去哪找日志,陌生的项目怎么快速的找到日志
1.去error_log文件找(php-fpm.conf→php.ini→nginx的error_log) 一定要注意日志文件的权限(fpm 的worker进程是否可写)
2.找set_exception_handler,set_error_handler的返回
不找日志,重置错误处理
不想管自定义的错误处理
把错误,异常处理的handeler全部重置掉,只去标准里去找即可
error_reporting(E_ALL);
ini_set("display_errors","On");
restore_exception_handler();
restore_error_handler();
常用调试
基本简单的调试
var_dump(),print_r(),var_export()
Yii框架的帮助函数 比如 yii\helpers\VarDumper::dump/dumpAsString());
调用栈追踪
1.debug_backtrace(int $options = DEBUG_BACKTRACE_IGNORE_ARGS, int $limit = 0)
调用到此处,调用链关系,根据需要传需要的参数,节省开销
2.get_included_files()
按顺序打印加载文件的顺序助于调试
比如常驻的(swoole,workerman)可以通过这个看,修改某个php文件(此处是不是已经加载到内存),用不用重启服务
其它工具
Yii的debugger tool
为了调试方便对其他人不产生影响,可使用种cookie方式开启(外加ip白名单)方式,比较适合yii混编的页面调试
辅助配套的cookie-editor插件
https://chrome.google.com/webstore/detail/cookie-editor/iphcomljdfghbkdcfndaijbokpgddeno?hl=zh-CN
whoops(类似yii debugger tool)

点击左边可以代码到那里
chrome控制台
https://github.com/ccampbell/chromephp
页面有刷新跳转时 可以开启console日志保持模式
性能调试
xhprof+xhgui


xhprof

php错误异常及其排错的更多相关文章
- C#中准确跟踪错误异常所在的文件位置方法
准确跟踪错误异常所在的文件位置方法是在发布改文件所在的DLL时候,把对应的pdb文件也一同发布. pdb文件是:PDB全称Program Database,不知道中文翻译叫什么.相信使用过VS的人对于 ...
- 错误/异常:java.io.FileNotFoundException: .\src\db.properties (系统找不到指定的路径。);的解决方法
1.异常视图 2.解决方法 与之相关的部分代码: static{ try { //读取db.properties Properties props = new Properties(); FileIn ...
- Expo大作战(十七)--expo结合哨兵(sentry)进行错误异常记录
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- JAVA-JSP内置对象之exception对象用来处理错误异常
相关资料:<21天学通Java Web开发> exception对象1.exception对象用来处理错误异常.2.如果要使用exception对象,必须指定page中的isErrorPa ...
- JavaScript 错误异常
JavaScript 错误异常 错误异常语句 try 语句测试代码块中的错误 catch 语句处理错误 throw 语句允许自定义错误 finally 语句在错误异常语句后,必须执行的代码块 try ...
- 错误/异常:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/classes/beans_common.xml]...的解决方法
1.第一个这种类型的异常 1.1.异常信息:org.springframework.beans.factory.BeanCreationException: Error creating bean w ...
- 错误/异常:org.hibernate.InvalidMappingException: Could not parse mapping document from resource com/shore/model/Husband.hbm.xml 的解决方法
1.错误/异常视图 错误/异常描述:无效的映射异常,无法从xxxxx资源中解析映射文档 2.解决方法 出现这个异常,一般情况下是包名写错了.改回来即可. 看报错/异常的第一行,最后面,会提示你 ...
- 错误/异常:org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save() 的解决方法
1.错误/异常视图 错误/异常描述:id的生成错误,在调用save()方法之前,必须先生成id. 2.解决方法 在对应的实体类的主键(id)的get方法上加上:@GeneratedValue( ...
- 错误/异常:org.hibernate.MappingException: Unknown entity: com.shore.entity.Student 的解决方法
1.错误/异常视图 错误/异常描述:Hibernate配置文件 映射异常,不明实体类Student(org.hibernate.MappingException: Unknown entity: co ...
随机推荐
- 使用 Spring 框架的好处是什么?
轻量:Spring 是轻量的,基本的版本大约 2MB.控制反转:Spring 通过控制反转实现了松散耦合,对象们给出它们的依 赖,而不是创建或查找依赖的对象们.面向切面的编程(AOP):Spring ...
- scrapy框架初识及使用
一.什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等) ...
- carsim2016事件如何设置
#carsim2016事件设置# 完成以下功能:车速低于60km/h时,加速,设置节气门开度为0.8,制动主斜体样式缸压力设为0:车速高于120km/h时,制动,设置节气门开度为0,制动主缸压力设置为 ...
- 【Matlab】简单的滑模控制程序及Simulink仿真
文章: [控制理论]滑模控制最强解析 滑模控制程序及Simulink仿真 这篇文章仿真和输出U的推到有些问题,博主根据此篇文章进行修改进行对sin(t)曲线的追踪(使用滑模控制) 使用滑模控制对sin ...
- 从CSS盒子模型说起
前言 总括: 对于盒子模型,BFC,IFC和外边距合并等概念和问题的总结 原文地址:从CSS盒子模型说起 知乎专栏:前端进击者 博主博客地址:Damonare的个人博客 为学之道,莫先于穷理:穷理之要 ...
- SQL语句中关于日期的操作(非常的有用)
在SQL Server 里的日期数据,我们经常可以用 字段<='2008-5-20'这样的表达式,但在oracle却不可以,因为数据类型不一样 字段是date型,'2008-5-20'是字符型, ...
- React+dva+webpack+antd-mobile 实战分享(二)
第一篇 https://segmentfault.com/a/11... 在上一篇文章中教给大家了怎么搭建项目的架子:那么今天我们就来说一下项目里的导航和列表的实现 导航 废话不说啦 下面直接给大家讲 ...
- DWRUtil.addOptions
DWRUtil.addOptions有5种模式 数组: DWRUtil.addOptions(selectid, array) 会创建一堆option,每个option的文字和值都是数组元素中的值. ...
- Spring-实现原理
探究SpringBoot实现原理 注意:必须完成SSM阶段源码解析部分的学习,链接:https://www.cnblogs.com/zwtblog/tag/源码/ 我们在前面的学习中切实感受到了Spr ...
- linux升级Nginx1.6到Nginx1.12.2
我的升级环境: 旧版Nginx:1.6 新版Nginx:1.12.2 系统:Redhat 5.5 64位 前期准备 1.查看Nginx的安装位置 ps -ef |grep nginx --如 ...