PHP错误处理及调试

一,常见的错误类型
在PHP中,错误用于指出语法、环境或编程问题。根据错误出现在编程过程中的不同环节,大致可以分为以下4类。
PHP错误处理及调试
1.语法错误:是指编写的代码不符合PHP的编写规范。
特点:语法错误最常见,也最容易修复
例如:遗漏了一个分号,就会显示错误信息。这类错误会阻止PHP脚本执行,通常发生在程序开发时,可以通过错误报告进行修复,再重新运行检查。
2.运行错误:一般不会阻止PHP脚本的执行,但会导致程序出现潜在的问题。
例如:在一个脚本中定义了两次同名常量,PHP通常会在第二次定义时提示一条错误信息。虽然PHP脚本继续执行,但第二次定义常量的操作没有执行成功。
3.逻辑错误:最让人头疼,不但不会阻止PHP脚本的执行,也不会显示出错误信息
例如:在if语句中判断两个变量的值是否相等,如果错把比较运算符“==”写成赋值运算符“=”就是一种逻辑错误,很难被发现。
4,环境错误:是由于PHP开发环境配置的问题引起的代码报错
例如:用mb_strlen()这个函数时,如果PHP环境中没有启用mbstring扩展,就会导致程序出错。
二,错误级别
PHP中的每个错误都有一个错误级别与之关联,用于表示当前错误的等级。
例如:Error、Warning、Notice等错误。
PHP采用常量的形式来表示错误级别,每个错误级别都是一个整型。
PHP错误处理及调试
PHP错误处理及调试
PHP错误处理及调试
Warning错误级别相比Notice更严重一些,不会影响脚本继续执行。
PHP错误处理及调试
1,除法运算前,可以使用if判断除数是否为0,若为0则拒绝执行除法运算
2,使用include前,先用is_file()函数判断该文件是否存在,防止错误发生
Fatal error是一种致命错误,在运行时发生。一旦发生该错误,PHP脚本会立即停止执行。例如,调用未定义的函数时就会发生致命错误,示例代码如下。
PHP错误处理及调试
Parse error是语法解析错误,当脚本存在语法错误时,无法解析成功,就会发生此错误。遇到此错误说明脚本没有执行。
PHP错误处理及调试
对于这类错误,可以借助代码编辑器的语法高亮和检查功能,以提醒开发人员避免语法出错。
三,手动触发错误
1,E_ERROR、E_NOTICE、E_WARNING等错误都是由PHP解释器自动触发的
2,PHP解释器自动触发的错误外,还可以根据不同的需求自定义错误,它们可以用于协助调试,或在发布给其他人的代码中生成不推荐使用的通知等
PHP的内置函数trigger_error()可以触发错误,该函数声明如下:
PHP错误处理及调试
第1个参数是错误信息内容
第2个参数是错误类别,默认为E_UESR_NOTICE
四,显示错误报告
在实际开发过程中,不可避免的会出现各种各样的错误,为了提高开发效率,PHP语言提供了显示错误的机制,该机制可以控制是否显示错误以及显示错误的级别等。在默认情况下,会将所有的错误显示在输出结果中。
1,显示错误报告——修改配置文件
直接配置php.ini文件来显示错误报告。
PHP错误处理及调试
(1)error_reporting用于设置报告的错误级别
(2)display_errors用于设置是否显示错误信息
(3)第1行代码中E_ALL & ~E_NOTICE表示报告除E_NOTICE之外的所有级别的错误
(4)第2行表示将错误报告显示在输出结果中
2,显示错误报告——error_reporting()和ini_set()函数
通过PHP提供的error_reporting()和ini_set()函数来实现显示错误报告。
PHP错误处理及调试
(1)ini_set()函数用来设置php.ini中指定选项的值,仅在本脚本周期内有效
(2)error_reporting()函数用于设置错误级别
(3)若要获取php.ini中的指定选项值,可以使用ini_get()函数进行获取
3,记录错误日志
思考:网站已经上线或者正在运行,错误显示出来会影响用户体验,这时如何将这些错误记录下来,为后期解决这些错误提供帮助?
答案:错误日志功能
实现方式:一通过配置文件来记录错误日志信息,二通过error_log()函数来记录错误日志信息。
4,记录错误日志——修改配置文件
通过修改php.ini配置文件,可以直接设置记录错误日志的相关配置项
PHP错误处理及调试(1)error_reporting用于设置显示错误级别
(2)E_ALL表示显示所有错误
(3)log_error用于设置是否记录日志
(4)error_log用于指定日志写入的文件路径
5,记录错误日志——error_log()函数
error_log()函数用于将错误记录到指定的日志文件中
PHP错误处理及调试
(1)第2个参数用于指定将错误信息发送到何处,当省略时默认为php.ini中的error_log配置的日志中,此处设置为3,表示发送到指定的日志文件中。
(2)第3个参数的设置取决于第2个参数,此处表示日志文件的路径
6,自定义错误处理器
当一个错误发生时,PHP会采取默认方式进行处理。当需要更改错误处理方式时,可以在PHP脚本中设置一个自定义错误处理器,实现在错误发生时自动调用一个函数进行处理。
自定义错误处理器是通过set_error_handler()函数来实现的,其函数声明如下:
PHP错误处理及调试
(1)callable表示参数errorhandler2error_handler为回调函数类型 (2)error_handler是必选参数,用于指定发生错误时运行的函数
(3)$error_types用于指定处理错误的级别类型
$error_handler回调函数的参数必须符合错误处理器函数的原型
function handler( int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] );

(1)参数$errno表示错误级别

(2)$errstr表示错误说明

(3)$errcontext表示在触发错误的范围内存在的所有变量的数组。其中前两个参数是必选参数。

(4)$errfile表示发生错误代码的文件名称

(5)$errline表示错误发生的代码行的行号
7,NetBeans集成开发环境
NetBeans是一个开放源代码、跨平台的开发工具,在官方网站https://netbeans.org可以获取软件的下载地址。本书基于NetBeans IDE for PHP 8.2版本进行讲解,该版本包含了HTML5、JavaScript、PHP三个主要功能。
PHP错误处理及调试
NetBeans集成开发环境——在NetBeans中新建项目
执行【文件】-【新建项目】可以创建一个新项目。
PHP错误处理及调试
(1)“项目名称”可以随意填写
(2)“源文件夹”表示项目源代码的存放位置,选择Apache默认站点目录即可
(3)“PHP版本”用于语法检查和代码提示,如果考虑项目代码的向下兼容性,就选择一个早期的版本
在完成配置信息后,单击【下一步】按钮进入运行配置页面
PHP错误处理及调试
将项目URL配置为“http://localhost/”,然后单击【完成】按钮完成项目创建。
NetBeans集成开发环境——实时语法检查
NetBeans编码时可实时语法检查,帮助开发人员及时发现问题,提高工作效率。
PHP错误处理及调试
(1)当代码出现语法错误时,NetBeans会使用红色的波浪线进行提示
(2)当代码正确时,提示就会消失
NetBeans集成开发环境——查找函数位置
若想在项目中查找函数的代码,可利用NetBeans的函数定位功能。
(1)在调用函数的地方按住【Ctrl】键
(2)用鼠标左键单击函数名称,就可以自动定位到函数的定义代码
PHP调试工具Xdebug
作用:是一个开放源代码的PHP程序调试器,用来调试和分析程序的运行状况。
下载地址:在Xdebug的官方网站https://xdebug.org可以获取软件的下载地址。
PHP调试工具Xdebug——Xdebug的安装
将下载好的php_xdebug-2.5.1-7.1-vc14.dll文件放到PHP的ext目录中
(C:\web\php7.1\ext),然后在php.ini文件中添加配置信息,引入该扩展即可。
PHP错误处理及调试
重启Apache服务使php.ini配置生效。为了验证是否安装成功,可以通过phpinfo()函数查看配置信息。如果在页面中看到Xdebug信息,说明Xdebug安装成功。
PHP错误处理及调试
PHP调试工具Xdebug——Xdebug的使用
为了演示Xdebug工具的使用,创建一个出错的程序,演示Xdebug的使用。