前端PHP入门-032-异常处理-应用级别

禁止显示错误

在php.ini配置文件中。我们可以控制php的错误显示状态。

php.ini中有一个专门的配置项:

display_errors

这个选项设置是否将错误信息输出到网页,或者对用户隐藏而不显示。

这个值的状态为 on 或者 off ,也可以设值为 1 或者 0

  • display_error的值设为0或者off则不在页面中显示错误,
  • 设为1或者on则显示错误信息。

问题:如果没有修改服务器php.ini的状态权限怎么办?

可以使用ini_set

  1. <?php
  2. ini_set(‘display_errors‘ , 0 );
  3. ?>

上面的代码也相当于修改了php.ini中display_errors的值。不过,仅仅在当前php代码中生效

问题:想取得php.ini的配置项状态怎么办?

可以使用ini_get(参数项) 得到参数的值。

演示例子:

  1. <?php
  2. echo ‘服务器中display_errors的状态为‘ . ini_get(‘display_errors‘);
  3. ?>


:修改完php.ini文件,需要重启服务器。


错误类型

php大家最常见的错误显示截图,本书帮大家进行了总结:

【掌握级别的错误类型】 我们将最常用的错误分为了三种:

错误类型 说明
E_ERROR 错误,文件直接中断
E_WARNING 警告,问题比较严重。但是还会继续向下运行
E_NOTICE 提示,有些小问题不会影响到程序。常发生在项目未定义
E_PARSE 编译时语法解析错误。解析错误仅仅由分析器产生。
E_ALL 所有的错误
E_STRICT 启用PHP对代码的修改建议,以确保代码具有最佳的互操作性和向前兼容性。
E_DEPRECATED 启用后将会对在未来版本中可能无法正常工作的代码给出警告。

在上面的几种类型中:

  1. error 最严重,必须要解决。不然程序无法继续向下执行
  2. warning 也很重要。通也必须要解决。如果明确的,故意的可以不用处理。
  3. notice 你可以不用管。但是在有些公司,项目标准特别高。在高标准要求的项目中也必须要解决。因为,notice会影响到PHP的执行效率。通常发生在函数未定义等。
  4. parse 错误,是指语法错写错了,必须要解决
  5. 代表全部类型的所有错误

【了解级别的错误类型】 再从这三种扩展出来了另外一些需要了解的错误项:

错误类型 错误说明
E_CORE_ERROR 在PHP初始化启动过程中发生的致命错误。该错误类似E_ERROR,但是是由PHP引擎核心产生的
E_CORE_WARNING PHP初始化启动过程中发生的警告 (非致命错误) 。类似 E_WARNING,但是是由PHP引擎核心产生的。
E_COMPILE_ERROR 致命编译时错误。类似E_ERROR,但是是由Zend脚本引擎产生的。
E_COMPILE_WARNING 编译时警告(非致命错误)。类似E_WARNING,但是是由Zend脚本引擎产生的
E_USER_ERROR 用户自定义错误
E_USER_WARNING 用户自定义警告
E_USER_NOTICE 用户自定义提示
E_USER_DEPRECATED 用户产少的警告信息。类似E_DEPRECATED,但是是由用户自己在代码中使用PHP函数trigger_error()来产生的。
E_RECOVERABLE_ERROR 可被捕捉的致命错误。它表示发生了一个可能非常危险的错误,但是还没有导致PHP引擎处于不稳定的状态。

在学习过程中,上面的类型了解即可。因为基本不会遇到,遇到了大家查一下本书或者查一下手册就清楚了。

error_reporting 报告错误类型

error_reporting 是指错误报告。在php.ini中也有这样一个参数。这个参数。决定了PHP引擎记录、报告、显示哪些错误类型。

  • 在php.ini中error_reporting参数。如若error_reporting参数设置为0。整个PHP引擎发错误均不会显示、输出、记录。

如果我们想显示所有错误可以写上:

error_reporting = E_ALL

想要显示所有错误但排除提示,可以将这个参数写为:

error_reporting = E_ALL & ~ E_NOTICE

显示所有错误,但排除提示、兼容性和未来兼容性。可写为:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

  • 在有些情况下我们无权限操作php.ini文件,又想要控制error_reporting怎么办呢?

在运行的xxxx.php文件中开始处,我们可以使用error_reporting()函数灰达到目标。

演示代码如下:

  1. <?php
  2. //关闭了所有的错误显示
  3. error_reporting(0);
  4. //显示所有错误
  5. //error_reporting(E_ALL);
  6. //显示所有错误,但不显示提示
  7. //error_reporting(E_ALL & ~ E_NOTICE);
  8. ?>

上面的代码你可以试试,故意写错代码看看。在当前文件中还会不会显示指定的错误。



[扩展、了解知识点]: @ 符是我们之前学习过的单行不显示错误,请不用或者少用@符。

我们拿读取一个不存在的文件,这样的php代码来演示实现过程:

  1. <?php
  2. //读取一个不存在的adsaf.txt文件,用@符抑制错误
  3. @$fp = fopen(‘adsaf.txt‘,‘r‘);
  4. ?>

@符效率较低,它在php内核中的实现过程是:

  1. <?php
  2. //关闭错误
  3. error_reporting(0);
  4. //读取一个不存在的文件,显示错误
  5. //显示错误
  6. error_reporting(E_ALL & ~ E_NOTICE);
  7. ?>

错误记录日志

日志收集系统会在背后默默的帮你收集错误、警告、提示。类似Java中的Log4J等等,其中:PHP的错误,警告这些是必须要收信的。

那么问题来了——不让用户看到,设置好错误报告级别好,如何将错误收集到日志系统中呢?

这里有需要使用到php.ini的相关配置项。这两个配置项为:

参数 配置项 说明
log_errors on/off 是否开启日志记录
log_errors_max_len 整型,默认1024 单行错误最大记录长度
error_log syslog或者指定路径 错误日志记录在什么地方

说明:

  1. 在表格中的log_errorslog_errors_max_len非常好理解。
  2. error_log 指定将错误存在什么路径上。配置项中的syslog可能有点不太好理解。syslog是指系统来记录。windows系统在电脑的日志收集器里面。linux默认在:/etc/syslog.conf

[扩展] 了解知识点。若Linux系统启动或修改了日志收集。可能存储在第三方专用的日志收集服务器中。

此外,PHP还为我们专门准备了一个自定义的错误日志函数:

bool error_log ( string 错误消息[,int" role="presentation" style="position: relative;">错误消息[,int错误消息[,int错误消息类型 = 0 [, string $存储目标]] )

这个函数可以把错误信息发送到web服务器的错误日志,或者到一个文件里。

常用的错误消息类型:

错误消息类型 说明
0 发送至默认的error_log指定位置
1 发送到指定的邮件位置
3 发送至指定的文件位置

示例:

  1. <?php
  2. //无法连接到数据库服务器,直接记录到php.ini 中的error_log指定位置
  3. error_log("无法连接到数据库服务器服务器");
  4. //可以发送邮件,但是php.ini必须配置过邮件系统
  5. error_log(‘可以用邮件报告错误,让运维人员半夜起床干活‘,1 ,‘[email protected]‘);
  6. //记录在指定的位置
  7. error_log("我是一个错误哟", 3, "d:/test/my-errors.log");
  8. ?>


注意:

error_log 中发送邮件可能对初学者不熟,您可以不用掌握些块知识。


量力而为,自定义异常函数

这一块知识起点有些高。大多数人没有软件工程、自定义错误处理的经验,很难想象出使用的场景。若你想跳过此块的学习,完全可以,并且我们支持。

此块知识点对于实际应用中应用场景不多。如果,有计划开始要自己写框架时、或者您做完了本书的第一个项目。

您可以回头再来看11.4这一章的内容。

用户自定义错误经常用到的两个函数:

set_error_handler ( callable $回调的错误处理函数)

设置一个用户定义的错误处理函数

trigger_error ( string $error_msg)

产生一个用户级别的 error/warning/notice 信息

  1. <?php
  2. //定义一个自定义的错误处理函数
  3. function customError($errno, $errstr, $errfile, $errline) {
  4. //输出错误消息
  5. echo "<b>Custom error:</b> [$errno] $errstr<br />";
  6. //输出错误文件和错误行
  7. echo "Error on line $errline in $errfile<br />";
  8. echo "Ending Script";
  9. //中止程序运行
  10. exit;
  11. }
  12. //使用set_error_handler 绑定用户自定义函数
  13. set_error_handler("customError");
  14. $test=2;
  15. //触发自定义错误
  16. if ($test > 1) {
  17. trigger_error("A custom error has been triggered");
  18. }
  19. ?>

来自为知笔记(Wiz)

时间: 2024-10-11 19:16:53

前端PHP入门-032-异常处理-应用级别的相关文章

前端PHP入门-034-Session技术-掌握级别

而Session是通过将数据保存在服务器端来实现保持连接的.我们通过一个例子来了解session的机制. 我们去饮料店买饮料,下单以后服务员会给我们一个号码牌,然后你走到一旁,服务员并不认识你是谁,如果你想拿到你的饮料,你必须提供你的号码牌给服务员才可以,服务员通过号码牌来查记录,来确认你是顾客,确认你点了什么饮料,然后才会把你点的饮料给你. 了解了session原理,再回到Web技术中,我们有2种方法让客户端拿到"号码牌",一种是通过cookie,一种是通过把值嵌入网页传给客户端.我

前端制作入门知识

原文链接:http://caibaojian.com/frontend-base.html 前端制作入门知识 A-A+ 前端博客•2015-08-18•前端开发•CSS | 前端基础•2020View1 文章目录 一.名词解释 二.文本格式化 三.表单表格 四.文本格式化 五.CSS布局 六.html5视频音频 七.一些约定 八.命名空间 九.基本设置-public.css 十.框架设置 来自百度文库:web前端学习总结(精华版),里面讲了许多的知识,非常适合刚进入前端的童鞋,就算一些有点基础的

前端快速入门

前端快速入门 第一篇 数据基本操作 [01] 数据库基本操作 [02] 数据库my.ini配置 [03] mysql支持的数据类型 [04] 表修改.表的引擎.约束条件 [05] 表之间的关系 [06] 单表多表子查询 [07] 子查询|视图|事务 第二篇 命令整合版 [01] 数据库my.ini配置 [02] 数据库连接与密码修改 [03] 数据库的基本操作 [04] 数据库表与字段和引擎操作 [05] 表的约束创建和增删改查 [06] 多表关系一对一 [07] 多表关系一对多和多对多 [08

前端PHP入门-028-文件操作-掌握级别

作为刚入门我们员经常会干的意见事情是ctrl+c和ctrl+v,鼠标右键删除文件.会control+c(或右键)复制.粘贴文件以及新建文件,还可以设置文件的是否为只读文件等等 可不可以写入修改配置文件? 是不是可以做PHP安装的时候检测文件的权限 是不是可以做生成Html文件等等很多不同的操作 对于美工的各位同学,可能不太好理解,也就是说让程序去控制文件的操作,让我们变的更懒一些 读取文件 掌握函数的使用 readfile 读取文件 int readfile ( string $文件名) 功能:

前端PHP入门-027-数组常用函数-掌握级别

下面的函数一定要到熟悉甚至到掌握级别. 这些函数,也是面试中基础面试中最爱问到的问题. 函数名 功能 array_combine() 生成一个数组,用一个数组的值作为键名,另一个数组值作为值 range() 创建并返回一个包含指定范围的元素的数组. compact() 创建一个由参数所带变量组成的数组 array_fill() 用给定的值生成数组 array_chunk() 把一个数组分割为新的数组块 array_merge() 把两个或多个数组合并为一个数组 array_slice() 在数组

前端PHP入门-029-文件操作-掌握级别

人生只有三天,活在昨天的人迷惑:活在明天的人等待:活在今天的人最踏实.你永远无法预测意外和明天哪个来得更早,所以,我们能做的,就是尽最大的努力过好今天.请记住:今天永远是昨天死去的人所期待的明天. file_put_contents写入文件 我们先来学习第一种写入文件的方式: int file_put_contents ( string 文件路径,string" role="presentation" style="position: relative;"

web前端工程师入门须知

先说下web前端工程师的价值,目前web产品交互越来越复杂,用户使用体验和网站前端性能优化这些都得靠web前端工程师去做web前端工程师是 设计加开发的综合体,web前端工程师是在开发人员中最直接面向产品,面向用户的设计人员,一个开发团队的成果是要靠web前端工程师去展现,因为用户不 会去关心后台的处理有多么强大 :在设计人员中web前端工程师是直接面向开发人员的设计人员,向开发人员以一种计算机语言的方式传递其设计理念,web前端工程师在整个团队中是很关键 的. 在我眼中一名合格的web前端工程

前端PHP入门-006-表达式和运算符

算术运算 概念 算数运算符,就是大家小学所学绝大多数知识: 符号 描述 示例 + 加号 x+" role="presentation" style="position: relative;">x+x+y - 减号 x−" role="presentation" style="position: relative;">x?x?y * 乘号 x∗" role="presentat

前端PHP入门-002-安装WAMP的集成环境md

> 第一次讲PHP,让我感觉还是满好玩的,一种新的知识的学习,需要我们努力! > 这次PHP课程计划是15天快速入门的课程! 只是单独的讲PHP语言,不涉及很深的内容,只是想让web前端的各位同学能对其有一些了解! ## 别去纠结安装环境 > 不管黑猫还是白猫,会抓老鼠就是好猫! > 抓住重点,你是要学习一门编程语言,不是学习工具! > 1.环境能满足你的学习需求. > 2.不要在环境上面反复纠结,耽误宝贵的学习时间. ## 怎么简单怎么来? 网上有一些大神,会说从基础