`
songzhan
  • 浏览: 248060 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

PHP 错误处理

 
阅读更多

在 PHP 中,默认的错误处理很简单。一条消息会被发送到浏览器,这条消息带有文件名、行号以及一条描述错误的消息。

PHP 错误处理

在创建脚本和 web 应用程序时,错误处理是一个重要的部分。如果您的代码缺少错误检测编码,那么程序看上去很不专业,也为安全风险敞开了大门。

本教程介绍了 PHP 中一些最为重要的错误检测方法。

我们将为您讲解不同的错误处理方法:

  • 简单的 "die()" 语句
  • 自定义错误和错误触发器
  • 错误报告

基本的错误处理:使用 die() 函数

第一个例子展示了一个打开文本文件的简单脚本:

<?php
$file=fopen("welcome.txt","r");
?>

如果文件不存在,您会获得类似这样的错误:

Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: 
No such file or directory in C:\webfolder\test.php on line 2

为了避免用户获得类似上面的错误消息,我们在访问文件之前检测该文件是否存在:

<?php
if(!file_exists("welcome.txt"))
 {
 die("File not found");
 }
else
 {
 $file=fopen("welcome.txt","r");
 }
?>

现在,假如文件不存在,您会得到类似这样的错误消息:

File not found

比起之前的代码,上面的代码更有效,这是由于它采用了一个简单的错误处理机制在错误之后终止了脚本。

不过,简单地终止脚本并不总是恰当的方式。让我们研究一下用于处理错误的备选的 PHP 函数。

创建自定义错误处理器

创建一个自定义的错误处理器非常简单。我们很简单地创建了一个专用函数,可以在 PHP 中发生错误时调用该函数。

该函数必须有能力处理至少两个参数 (error level 和 error message),但是可以接受最多五个参数(可选的:file, line-number 以及 error context):

语法

error_function(error_level,error_message,
error_file,error_line,error_context)
参数 描述
error_level

必需。为用户定义的错误规定错误报告级别。必须是一个值数。

参见下面的表格:错误报告级别。

error_message 必需。为用户定义的错误规定错误消息。
error_file 可选。规定错误在其中发生的文件名。
error_line 可选。规定错误发生的行号。
error_context 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。

错误报告级别

这些错误报告级别是错误处理程序旨在处理的错误的不同的类型:

值 常量 描述
2 E_WARNING 非致命的 run-time 错误。不暂停脚本执行。
8 E_NOTICE

Run-time 通知。

脚本发现可能有错误发生,但也可能在脚本正常运行时发生。

256 E_USER_ERROR 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。
512 E_USER_WARNING 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。
1024 E_USER_NOTICE 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。
4096 E_RECOVERABLE_ERROR 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler())
8191 E_ALL

所有错误和警告,除级别 E_STRICT 以外。

(在 PHP 6.0,E_STRICT 是 E_ALL 的一部分)

现在,让我们创建一个处理错误的函数:

function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Ending Script";
 die();
 }

上面的代码是一个简单的错误处理函数。当它被触发时,它会取得错误级别和错误消息。然后它会输出错误级别和消息,并终止脚本。

现在,我们已经创建了一个错误处理函数,我们需要确定在何时触发该函数。

Set Error Handler

PHP 的默认错误处理程序是内建的错误处理程序。我们打算把上面的函数改造为脚本运行期间的默认错误处理程序。

可以修改错误处理程序,使其仅应用到某些错误,这样脚本就可以不同的方式来处理不同的错误。不过,在本例中,我们打算针对所有错误来使用我们的自定义错误处理程序:

set_error_handler("customError");

由于我们希望我们的自定义函数来处理所有错误,set_error_handler() 仅需要一个参数,可以添加第二个参数来规定错误级别。

实例

通过尝试输出不存在的变量,来测试这个错误处理程序:

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr";
 }

//set error handler
set_error_handler("customError");

//trigger error
echo($test);
?>

以上代码的输出应该类似这样:

Error: [8] Undefined variable: test

触发错误

在脚本中用户输入数据的位置,当用户的输入无效时触发错误的很有用的。在 PHP 中,这个任务由 trigger_error() 完成。

例子

在本例中,如果 "test" 变量大于 "1",就会发生错误:

<?php
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below");
}
?>

以上代码的输出应该类似这样:

Notice: Value must be 1 or below
in C:\webfolder\test.php on line 6

您可以在脚本中任何位置触发错误,通过添加的第二个参数,您能够规定所触发的错误级别。

可能的错误类型:

  • E_USER_ERROR - 致命的用户生成的 run-time 错误。错误无法恢复。脚本执行被中断。
  • E_USER_WARNING - 非致命的用户生成的 run-time 警告。脚本执行不被中断。
  • E_USER_NOTICE - 默认。用户生成的 run-time 通知。脚本发现了可能的错误,也有可能在脚本运行正常时发生。

例子

在本例中,如果 "test" 变量大于 "1",则发生 E_USER_WARNING 错误。如果发生了 E_USER_WARNING,我们将使用我们的自定义错误处理程序并结束脚本:

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Ending Script";
 die();
 }

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>1)
 {
 trigger_error("Value must be 1 or below",E_USER_WARNING);
 }
?>

以上代码的输出应该类似这样:

Error: [512] Value must be 1 or below
Ending Script

现在,我们已经学习了如何创建自己的 error,以及如何触发它们,现在我们研究一下错误记录。

错误记录

默认地,根据在 php.ini 中的 error_log 配置,PHP 向服务器的错误记录系统或文件发送错误记录。通过使用 error_log() 函数,您可以向指定的文件或远程目的地发送错误记录。

通过电子邮件向您自己发送错误消息,是一种获得指定错误的通知的好办法。

通过 E-Mail 发送错误消息

在下面的例子中,如果特定的错误发生,我们将发送带有错误消息的电子邮件,并结束脚本:

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Webmaster has been notified";
 error_log("Error: [$errno] $errstr",1,
 "someone@example.com","From: webmaster@example.com");
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>1)
 {
 trigger_error("Value must be 1 or below",E_USER_WARNING);
 }
?>

以上代码的输出应该类似这样:

Error: [512] Value must be 1 or below
Webmaster has been notified

接收自以上代码的邮件类似这样:

Error: [512] Value must be 1 or below

这个方法不适合所有的错误。常规错误应当通过使用默认的 PHP 记录系统在服务器上进行记录。

分享到:
评论

相关推荐

    PHP错误处理函数

    总的来说,PHP错误处理是通过结合`set_error_handler()`、`error_reporting()`和自定义错误处理函数来实现的,这样可以更有效地管理错误,提供更专业的错误反馈,同时确保程序的安全性。通过适当的错误处理,开发者...

    ecshop在高版本PHP错误处理之修改好的

    标题中的"ecshop在高版本PHP错误处理之修改好的"表明了这个压缩包文件是针对ECSHOP在运行于高版本PHP环境时遇到的错误进行了优化和修复。ECSHOP是一款开源的电子商务系统,它可能在PHP版本升级后出现兼容性问题,...

    php_错误处理机制

    ### PHP 错误处理机制详解 #### 一、引言 在PHP开发中,错误处理是一项重要的技术。良好的错误处理机制不仅能帮助开发者更好地调试代码,还能提升用户体验,尤其是在Web应用程序中。本文将深入探讨PHP中的错误处理...

    计算机后端-PHP最佳开发入门实战课程09-01 PHP错误处理方式.mp4

    计算机后端-PHP最佳开发入门实战课程09-01 PHP错误处理方式.mp4

    一个显示效果非常不错的PHP错误、异常处理类

    知识点一:PHP错误处理 在PHP中,错误处理通常是指对程序运行中出现的非预期情况的处理。PHP提供了一套错误处理机制,包括错误级别和错误处理函数。错误级别从低到高依次有:E_ERROR、E_WARNING、E_PARSE、E_NOTICE...

    PHP Error(错误处理)讲解.md

    ## 关于PHP错误处理 ### 一、使用`die()`函数,处理错误 `die()`函数在PHP中是一个非常实用的工具,它用于在遇到特定错误或条件时立即终止脚本的执行,并且可以选择性地向用户输出一条消息。这在调试阶段特别有用...

    PHP Error:一个为更好的解决开发过程中面临着标准的PHP错误信息一个开源的PHP类库

    PHP Error 是一个专门为开发者设计的开源PHP类库,它的主要目标是改善标准PHP错误处理机制,为开发过程中遇到的问题提供更清晰、更有帮助的错误信息。这个类库不仅提供了友好的错误报告方式,还集成了语法高亮显示,...

    PHP 错误处理机制

    使用自定义错误处理函数时需要注意,如果错误发生在脚本执行之前,由于自定义错误处理函数还未注册,因此不会触发自定义的错误处理逻辑,此时只能依赖PHP的默认错误处理机制。 总之,PHP的错误处理机制提供了丰富的...

    php实现的错误处理封装类实例

    本文介绍了一个PHP错误处理的封装类,它通过面向对象的方式将错误处理的逻辑进行封装,以便复用,并且提供了日志记录和邮件通知的功能。 首先,我们定义了一个名为MyErrorHandler的类,这个类负责处理不同类型的...

    PHP安全之留意错误报告

    总之,理解和掌握这些PHP错误处理策略对于构建健壮、安全的应用至关重要。在开发过程中,充分利用错误报告来提升代码质量,而在部署时,要确保错误处理方式不会暴露系统的脆弱性。通过合理的配置和使用异常处理,...

    带美化错误提示的留言本

    【标题】:“带美化错误提示的留言本”项目解析 在IT行业中,用户界面的友好性和易用性是至关重要的,特别是在开发Web应用...对于学习者来说,这是一个很好的实践案例,可以深入理解PHP错误处理机制以及前端美化技巧。

    php-error-handler:尝试编写详细说明标准 PHP 错误处理程序的 PSR 风格的标准文档

    RFC:PHP 错误处理程序 尝试编写详细说明标准 PHP 错误处理程序的 PSR 样式标准文档。 标准文件 主要的错误处理程序规范: 。 理由和其他信息: 。 运行测试套件 composer install vendor/bin/archer 需要在PATH ...

    PHP中的错误处理、异常处理机制分析

    在PHP编程中,错误处理和异常处理是确保代码健壮性、可靠性和安全性的重要组成部分。在上述内容中,提到了PHP处理错误的两种主要方法:错误处理和异常处理。 首先,我们来了解一下PHP中的错误处理机制。PHP提供了...

    Neha:Neha - 很好的 php 错误处理程序

    很好的 php 错误处理 执照 麻省理工学院执照 安装 使用 composer create neha/neha安装它 或者直接下载,只有一个文件 源代码中有一些漂亮的例子,所以看看它 非常欢迎拉取请求,喜欢向他人学习

    PHP错误处理函数register_shutdown_function使用示例

    PHP是一种广泛使用的服务器端脚本语言,它提供了丰富的函数用于处理各种运行时情况,包括错误处理。本文主要探讨PHP中的一个非常有用的函数——register_shutdown_function。这个函数能够注册一个用户自定义的函数,...

    轻松学PHP之PHP的错误和异常处理

    轻松学PHP之PHP的错误和异常处理,可以轻松学习PHP。PHP学习的宝典。PHP的错误和异常处理是非常重要的。

    2022年最新PHP技术笔试题.doc

    通过这些知识点,我们可以了解 PHP 和 MySQL 的基本概念和使用方法,包括表单处理、数组处理、错误处理、字符串处理、SQL 优化、SQL 函数、MySQL 数据库、PHP 和 MySQL 连接、PHP 和 MySQL 操作等方面。

Global site tag (gtag.js) - Google Analytics