PHP中的错误处理(附带实例)
在编写 PHP 程序时,如果没有对程序中可能存在的问题进行处理,一旦程序的逻辑存在漏洞,上线后就会出现很多安全问题。
错误处理是程序的一个重要组成部分,在程序中恰当地使用错误处理可以提高程序的安全性,同时也方便开发人员检查代码。本节将对 PHP 中的错误处理进行详细讲解。
常见的错误类型如下表所示:
为了使读者更好地理解这些错误类型,下面对开发过程中经常遇到的 Notice、Warning 和 Fatal error 类型的错误进行演示。
PHP 的配置文件 php.ini 中已经默认开启了错误报告,示例配置如下:
error_reporting() 函数用于设置错误级别常量,ini_set() 函数用于设置 php.ini 中指定选项的值,通过 error_reporting() 函数和 ini_set() 函数开启错误报告的示例代码如下:
记录错误日志的方式有两种,具体介绍如下:
1) 通过修改php.ini配置文件记录错误日志。在 PHP 的配置文件 php.ini 中添加错误日志的配置,具体配置如下:
2) 通过error_log()函数记录错误日志。error_log() 函数能够将错误信息记录到指定的日志中。该函数的第 1 个参数是错误信息;第 2 个参数用于指定将错误信息记录到何处,默认记录到 php.ini 中 error_log 配置的日志中;第 3 个参数用于指定错误日志文件的路径。
使用 error_log() 函数记录错误日志的示例代码如下:
在程序中进行错误处理时,我们需要观察现有的代码,根据现有代码的逻辑规则,分析和判断程序可能存在的问题,并提出解决方案。这种分析和判断的能力使我们能够更加深入地思考和解决问题,从而提高程序的质量。
错误处理是程序的一个重要组成部分,在程序中恰当地使用错误处理可以提高程序的安全性,同时也方便开发人员检查代码。本节将对 PHP 中的错误处理进行详细讲解。
PHP错误类型
PHP 有多种错误类型,如 Notice、Warning和Fatal error 等,每个错误类型都有一个常量与之关联,还可以使用具体的值来表示。常见的错误类型如下表所示:
常量 | 值 | 描述 |
---|---|---|
E_ERROR | 1 | 致命的运行时错误,这类错误不可恢复,会导致脚本停止运行 |
E_WARNING | 2 | 运行时警告,仅给出提示信息,脚本不会停止运行 |
E_PARSE | 4 | 编译时语法解析错误,说明代码存在语法错误,脚本无法运行 |
E_NOTICE | 8 | 运行时通知,表示脚本遇到可能会表现为错误的情况 |
E_CORE_ERROR | 16 | 类似 E_ERROR,是由 PHP 引擎核心产生的 |
E_CORE_WARNING | 32 | 类似 E_WARNING,是由 PHP 引擎核心产生的 |
E_COMPILE_ERROR | 64 | 类似 E_ERROR,是由 Zend 脚本引擎产生的 |
E_COMPILE_WARNING | 128 | 类似 E_WARNING,是由 Zend 脚本引擎产生的 |
E_USER_ERROR | 256 | 类似 E_ERROR,是由用户在代码中使用 trigger_error()产生的 |
E_USER_WARNING | 512 | 类似 E_WARNING,是由用户在代码中使用 trigger_error()产生的 |
E_USER_NOTICE | 1024 | 类似 E_NOTICE,是由用户在代码中使用 trigger_error()产生的 |
E_STRICT | 2048 | 严格语法检查,确保代码具有互用性和向前兼容性 |
E_RECOVERABLE_ERROR | 4096 | 可被捕捉的致命错误 |
E_DEPRECATED | 8192 | 运行时通知,对未来版本中可能无法正常工作的代码给出警告 |
E_USER_DEPRECATED | 16384 | 类似 E_DEPRECATED,是由用户在代码中使用 trigger_error()产生的 |
E_ALL | 32767 | 所有的错误、警告和通知 |
为了使读者更好地理解这些错误类型,下面对开发过程中经常遇到的 Notice、Warning 和 Fatal error 类型的错误进行演示。
1) Notice
Notice 类型的错误通常是代码不严谨造成的,示例代码如下:// 使用未定义的变量 echo $var; // 提示信息:Notice:Undefined variable…当使用未定义的变量时,应先判断变量是否存在,从而避免遇到 Notice 类型的错误。在实际开发中,不建议忽略 Notice 类型的错误,应尽量保持代码的严谨性和准确性。
2) Warning
Warning 错误相比 Notice 更严重一些,示例代码如下:// 使用include引入不存在的文件 include '1234'; // 提示信息:Warning: include(1234): Failed to open stream…使用 include 语句引入文件前,应先判断相应文件是否存在,以防止错误发生。
3) Fatal error
Fatal error 是致命错误,一旦发生这种错误,PHP 脚本会立即停止运行,示例代码如下:display(); // Fatal error:Uncaught Error:Call to undefined function… echo 'hello'; // 前一行代码发生错误,此行代码不会执行在上述示例代码中,在调用未定义的函数 display() 时发生了致命错误,输出语句没有执行。致命错误是在 PHP 脚本运行时发生的,一旦发生此类错误,脚本会立即停止运行。
PHP错误信息
当程序出错时,PHP 会报错,报错的信息称为错误信息。在 PHP 中可以对错误信息进行控制,一般通过两种方式控制,一种方式是错误报告,另一种方式是错误日志。1) 错误报告
开启或关闭错误报告有两种方式,一种是修改配置文件,另一种是调用 error_reporting() 函数和 ini_set() 函数。PHP 的配置文件 php.ini 中已经默认开启了错误报告,示例配置如下:
error_reporting = E_ALL display_errors = On在上述配置中,error_reporting 用于设置错误类型常量,默认值 E_ALL 表示报告所有的错误、警告和通知,如需关闭错误报告可设置为 0;display_errors 用于设置是否显示错误信息,默认值 On 表示显示,如需关闭则设置为 Off。
error_reporting() 函数用于设置错误级别常量,ini_set() 函数用于设置 php.ini 中指定选项的值,通过 error_reporting() 函数和 ini_set() 函数开启错误报告的示例代码如下:
error_reporting(E_ALL); ini_set('display_errors', On);在上述示例代码中,error_reporting() 函数中可以设置的错误常量参考表 1。ini_set() 函数的第 1 个参数为 display_errors;第 2 个参数的值为 On(也可以使用 1 代替)表示开启,如果想要关闭则设置为 Off(也可以使用 0 代替)。
2) 错误日志
在生产环境中,如果直接将程序的错误信息输出到网页中,会影响用户体验。此时,可以将这些错误信息记录到错误日志中,为后期解决这些错误提供帮助。记录错误日志的方式有两种,具体介绍如下:
1) 通过修改php.ini配置文件记录错误日志。在 PHP 的配置文件 php.ini 中添加错误日志的配置,具体配置如下:
error_reporting = E_ALL; log_error = On error_log = C:\web\php_errors.log在上述配置中,error_reporting 用于设置错误类型的常量,log_error 用于设置是否记录日志,error_log 用于指定错误日志文件的路径。
2) 通过error_log()函数记录错误日志。error_log() 函数能够将错误信息记录到指定的日志中。该函数的第 1 个参数是错误信息;第 2 个参数用于指定将错误信息记录到何处,默认记录到 php.ini 中 error_log 配置的日志中;第 3 个参数用于指定错误日志文件的路径。
使用 error_log() 函数记录错误日志的示例代码如下:
// 将错误信息记录到php.ini中error_log配置的日志文件中 error_log('error message a'); // 将错误信息记录到错误日志文件 error_log('error message b', 3, 'C:/web/php.log');在上述示例代码中,如果省略 error_log() 函数的第 2 个和第 3 个参数,则将错误信息记录到 php.ini 中 error_log 配置的日志文件中;如果将 error_log() 函数的第 2 个参数设置为 3,表示将错误信息记录到指定的文件中。
在程序中进行错误处理时,我们需要观察现有的代码,根据现有代码的逻辑规则,分析和判断程序可能存在的问题,并提出解决方案。这种分析和判断的能力使我们能够更加深入地思考和解决问题,从而提高程序的质量。