对于PHP错误,比如语法错误,需要做到收集错误并处理,在线上也要防止被普通用户看到关键的错误信息:

博客推荐:

PHP error_log记录日志的使用方法和配置:

https://www.cnblogs.com/caicaizi/p/6812010.html

手册:

http://www.w3school.com.cn/php/php_ref_error.asp

PHP的错误跟异常区别:

https://www.cnblogs.com/taijun/p/4234603.html

学会以后需要:

主要作用:
1、记录日志到指令文件
2、强错误信息发送到邮箱之中相关配置:
error_reporting     ;将会向PHP报告发生的每个错误
display_errors      ;不显示满足上条 指令所定义规则的所有错误报告
log_errors          ;决定日志语句记录的位置
log_errors_max_len  ;设置每个日志项的最大长度
error_log           ;指定产生的 错误报告写入的日志文件位置 

自己动手试试哦!

模拟错误 + 模拟异常 + 发送email + 线上环境对普通用户隐藏错误信息

1、PHP错误类型和相应例子:

分号缺失,致命错误。

直接注册在根命名空间的error类重名会出现致命错误,直接脚本终止,

如果在错误出现之前都没注册shutdown函数的话,直接给你一个error500,很难受

2、自己常用的错误报告处理类:

ThinkPHP的写法(方然仿照的,真实的TP5.0错误处理机制更加细分,SQL exception 还有 缓存的exception 等等统统继承基础类扩展出了一个类(虽然跟没扩展一样,但是这个OOP思想值得借鉴)):

自己用的简单的错误处理:

<?php
/*** 错误处理机制* @author xu <435861851@qq.com>*/
class ErrorCatch{/*** 注册异常处理* @access public* @return void*/public static function register(){// 设定报错级别为全部
        error_reporting(E_ALL);// set_error_handler — 设置用户自定义的错误处理函数set_error_handler([__CLASS__, 'appError']);// set_exception_handler — 设置用户自定义的异常处理函数set_exception_handler([__CLASS__, 'appException']);// register_shutdown_function — 注册一个会在php中止时执行的函数,脚本执行完成或者 exit() 后被调用register_shutdown_function([__CLASS__, 'appShutdown']);}/*** 错误处理* @access public* @param  integer $errno      错误编号* @param  integer $errstr     详细错误信息* @param  string  $errfile    出错的文件* @param  integer $errline    出错行号* @param  array   $errcontext 出错上下文* @return void* @throws ErrorException*/public static function appError($errno, $errstr, $errfile = '', $errline = 0, $errcontext = []){$msg = '错误编号: <strong>'.$errno.'</strong></br>';$msg = '错误信息: <strong>'.$errstr.'</strong></br>';$msg .= '文件: <strong>'.$errfile.'</strong></br>';$msg .= '在第: <strong>'.$errline.'</strong> 行</br>';echo $msg;exit();}/*** 异常处理* @access public* @param   Exception $e 异常对象* @return void*/public static function appException($exception){echo "捕获异常: " , $exception->getMessage(), "\n";}/*** 异常中止处理* @access public* @return void*/public static function appShutdown(){// 只有错误导致的程序终止才会托管至错误处理函数if (!is_null($error = error_get_last()) && self::isFatal($error['type'])) {self::appException(new ErrorException($error['type'], $error['message'], $error['file'], $error['line']));}}/*** 确定错误类型是否致命* @access protected* @param  int $type 错误类型* @return bool*/protected static function isFatal($type){return in_array($type, [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE]);}}// 注册自定义错误处理
ErrorCatch::register();// 模拟抛出异常
trigger_error("Cannot divide by zero", E_USER_ERROR);

如果上面的trigger_error的时候后面少了一个;那么直接就是500,错误,显示服务器内部错误,

不能被shutdown函数捕获,

像这样,已经注册了函数了,就可以捕获到错误信息:

捕获异常: syntax error, unexpected end of file

一些常犯的错误及其报错信息:

<?phpforeach ([] as $k => $v)
{echo $v;
}
// no any msg catcharray_merge([1,2,3],'');// Warning: array_merge(): Argument #2 is not an array in D:\webserver\www\test.php on line 8if($a)
{echo 1;
}// Notice: Undefined variable: a in D:\webserver\www\test.php on line 13" select * from user where id in ([])";// General error: 936 OCIStmtExecute: ORA-00936: 缺失表达式 PDO exception IN ()后面表达式不能为空不能为ARRAYif(in_array("a", $a)){echo 1;};// Notice: Undefined variable: a in D:\webserver\www\test.php on line 24
// Warning: in_array() expects parameter 2 to be array, null given in D:\webserver\www\test.php on line 24echo 22// Parse error: syntax error, unexpected end of file, expecting ',' or ';' in D:\webserver\www\test.php on line 27

转载于:https://www.cnblogs.com/xuweiqiang/p/8324897.html

PHP错误处理注册机制相关推荐

  1. C#实现软件授权,限定MAC运行(软件license管理,简单软件注册机制)

    一个绿色免安装软件,领导临时要求加个注册机制,不能让现场工程师随意复制.事出突然,只能在现场开发(离开现场软件就不受我们控了).花了不到两个小时实现了简单的注册机制,稍作整理.  基本原理:1.软件一 ...

  2. C#软件license管理(简单软件注册机制)

    最近做了一个绿色免安装软件,领导临时要求加个注册机制,不能让现场工程师随意复制.事出突然,只能在现场开发(离开现场软件就不受我们控了).花了不到两个小时实现了简单的注册机制,稍作整理.         ...

  3. vue-router 源码阅读 - 文件结构与注册机制

    文章目录 0. 前备知识 1. 文件结构 2. 入口文件 2.1 rollup 出口与入口 2.2 Vue.use 3. 路由注册 3.1 install 3.2 VueRouter 前端路由是我们前 ...

  4. Citrix XenDesktop 中VDA向DDC注册机制解析

    直接切入正题吧,至于什么是VDA?什么是DDC之类的我就不用做过多介绍了. 众所周知用户如果需要使用虚拟桌面,那么必须将虚拟桌面部署在DDC的交付组中并将虚拟桌面交付给用户.而且虚拟桌面在DDC中是已 ...

  5. 学会软件破解,让注册机制形同虚设

    一.    修改注册表文件,清除软件使用次数限制. 打开软件,首先跳出来一个注册的框,其中用户名可以随便填写.左下角红色的字显示还可以试用的次数.点击试用以后,可以进入软件.但是试用总共有100次.我 ...

  6. MIDP2.0引入了Push注册机制

    Push MIDP2.0引入了Push注册机制,作为一种允许应用被自动启动的方法,由预先设置的警告或者经inbound连接收到的消息. 通过这种方法,MIDlets可以用来设置处理规则事件,如定时从服 ...

  7. 统一处理jquery ajax请求过程中的异常错误信息的机制

    统一处理jquery ajax请求过程中的异常错误信息的机制 参考文章: (1)统一处理jquery ajax请求过程中的异常错误信息的机制 (2)https://www.cnblogs.com/wi ...

  8. 异常处理—错误抛出机制

    错误抛出机制:   把可能出现异常的代码写在try{}里,使用catch(){}设置一些异常陷阱来捕获异常.例如: 没有异常处理时异常的抛出机制:   为什么出现异常会在控制台上显示打印红色的异常呢? ...

  9. TensorFlow中的设备管理——Device的创建与注册机制

    背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 作为一款优秀的异构深度学习算法框架,TensorFlow可以在多种设备上运行算 ...

  10. 软件加密技术和注册机制加密基础(转)

    软件加密技术和注册机制加密基础 本文是一篇软件加密技术的基础性文章,简要介绍了软件加密的一些基本常识和一些加密产品,适用于国内软件开发商或者个人共享软件开发者阅读参考. 1.加密技术概述 一个密码系统 ...

最新文章

  1. [JAVAEE] Thymeleaf 基本语法: 迭代循环
  2. npm : 无法加载文件 D:\...\nodejs\npm.ps1,因为在此系统上禁止运行脚本
  3. 《Verilog HDL那些事儿》PDF 3.0版本发布
  4. 【如何管理开机自启动程序】
  5. python 来搞定 非线性方程组和最小二乘拟合问题
  6. cordova插件开发
  7. 用CComPtr吧,COM接口指针很危险
  8. python把字符串3des加密_Python干货之六大密码学编程库
  9. Windows环境下查看Java进程ID,找到java程序对应的进程pid
  10. mysql 宽字符注入_5. 宽字符注入详解与实战
  11. QTalk 基于Qt的局域网聊天软件(beta 0.1.0)
  12. Syncthing - 远程文件实时同步(P2P)工具简介、安装及使用
  13. 关于盒子背景图片布局
  14. 雷达威力图绘制matlab,科学网—matlab绘雷达图 - 张凌的博文
  15. blackbox_exporter端口及网络监控
  16. 天翼云等服务器配置Apache Web服务
  17. Java线程池几个参数的理解
  18. 科技版“传音入密”:音频聚光灯现在怎么样了?
  19. 初学者必备——三大类18条Java正则表达式语法
  20. 4月第2周业务风控关注 |互联网信息服务投诉平台正式上线试运行

热门文章

  1. c语言无符号扩展,C语言中的无符号扩展和带符号扩展
  2. c语言在输出字符串时可以用指针,C语言—字符串、指针
  3. java spring boot2 springMVC thymeleaf 整合案例
  4. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_17-页面查询接口定义-定义模型-需求分析和模型类...
  5. beego框架开发投票网站(1) beego基础之运行逻辑
  6. HTML5 Video播放服务端大文件
  7. 图论--最短路径--观光旅游
  8. 深入理解Java虚拟机运行时数据区
  9. PHP基础知识点汇总(三)
  10. SQL常见错误及处理方法