在 PHP 中,默认的错误处理很简单。一条错误消息会被发送到浏览器,这条消息带有文件名、行号以及描述错误的消息。php
在建立脚本和 Web 应用程序时,错误处理是一个重要的部分。若是您的代码缺乏错误检测编码,那么程序看上去很不专业,也为安全风险敞开了大门。程序员
本教程介绍了 PHP 中一些最为重要的错误检测方法。web
咱们将为您讲解不一样的错误处理方法:数组
第一个实例展现了一个打开文本文件的简单脚本:浏览器
若是文件不存在,您会获得相似这样的错误:安全
为了不用户获得相似上面的错误消息,咱们在访问文件以前检测该文件是否存在:服务器
如今,若是文件不存在,您会获得相似这样的错误消息:函数
相比以前的代码,上面的代码更有效,这是因为它采用了一个简单的错误处理机制在错误以后终止了脚本。学习
然而,简单地终止脚本并不老是恰当的方式。让咱们研究一下用于处理错误的备选的 PHP 函数。测试
建立一个自定义的错误处理器很是简单。咱们很简单地建立了一个专用函数,能够在 PHP 中发生错误时调用该函数。
该函数必须有能力处理至少两个参数 (error level 和 error message),可是能够接受最多五个参数(可选的:file, line-number 和 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 | 全部错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分) |
如今,让咱们建立一个处理错误的函数:
上面的代码是一个简单的错误处理函数。当它被触发时,它会取得错误级别和错误消息。而后它会输出错误级别和消息,并终止脚本。
如今,咱们已经建立了一个错误处理函数,咱们须要肯定在什么时候触发该函数。
PHP 的默认错误处理程序是内建的错误处理程序。咱们打算把上面的函数改造为脚本运行期间的默认错误处理程序。
能够修改错误处理程序,使其仅应用到某些错误,这样脚本就能以不一样的方式来处理不一样的错误。然而,在本例中,咱们打算针对全部错误来使用咱们自定义的错误处理程序:
因为咱们但愿咱们的自定义函数能处理全部错误,set_error_handler() 仅须要一个参数,能够添加第二个参数来规定错误级别。
经过尝试输出不存在的变量,来测试这个错误处理程序:
以上代码的输出以下所示:
在脚本中用户输入数据的位置,当用户的输入无效时触发错误是颇有用的。在 PHP 中,这个任务由 trigger_error() 函数完成。
在本例中,若是 "test" 变量大于 "1",就会发生错误:
以上代码的输出以下所示:
您能够在脚本中任何位置触发错误,经过添加的第二个参数,您可以规定所触发的错误级别。
可能的错误类型:
在本例中,若是 "test" 变量大于 "1",则发生 E_USER_WARNING 错误。若是发生了 E_USER_WARNING,咱们将使用咱们自定义的错误处理程序并结束脚本:
以上代码的输出以下所示:
如今,咱们已经学习了如何建立本身的 error,以及如何触发它们,接下来咱们研究一下错误记录。
在默认的状况下,根据在 php.ini 中的 error_log 配置,PHP 向服务器的记录系统或文件发送错误记录。经过使用 error_log() 函数,您能够向指定的文件或远程目的地发送错误记录。
经过电子邮件向您本身发送错误消息,是一种得到指定错误的通知的好办法。
在下面的例子中,若是特定的错误发生,咱们将发送带有错误消息的电子邮件,并结束脚本:
以上代码的输出以下所示:
接收自以上代码的邮件以下所示:
这个方法不适合全部的错误。常规错误应当经过使用默认的 PHP 记录系统在服务器上进行记录。