首页博客网络编程
PHP 错误不会经常到达用户端,但开发人员每天都会遇到它们。当您在编程时看到 PHP 显示错误时,您的项目会延迟,因为您被迫修复特定问题。
即使是新手也熟悉最基本的错误:找不到特定页面、URL 句柄输入不正确等。浏览器将显示一条错误消息,其中包含文件名、行号和描述检测到的错误的说明。没有必要担心PHP错误,因为有一些方法可以帮助你管理它们。
错误处理是编写具有用户输入的任何 Web 应用程序时不可或缺的一部分。
一个基本的 PHP 错误处理程序示例是一个简单的条件语句,它将 PHP 错误消息分配给放置在输入字段旁边的空字符串,指定错误是什么。
当您了解什么是PHP错误时,您需要知道它们有两种类型:内部和外部。内部错误是开发人员意外留在脚本中的错误。为避免它们,您需要小心。外部 PHP 错误是在代码外部出现的错误(例如,无法连接到数据库)。
在PHP错误处理方面,有三种基本方法:
一个基本声明。die()
定义您自己的错误消息和警报(使 PHP 显示错误)。
报告错误。
下面的示例显示打开文本文件的脚本:
例复制
<?php $doc = fopen('helloworld.txt', 'r');?>
如果提到的文件不存在,您将看到以下消息:Warning: fopen(helloworld.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\dir\error_handling.php on line 2
为了防止向用户显示默认错误消息,我们应该在尝试访问它之前检查该文件是否存在:
例复制
<?php if(!file_exists('helloworld.txt')) { die('No such file exists!'); } else { $doc = fopen('helloworld.txt', 'r'); }?>
修改脚本后,将显示以下错误消息:File not found
此方法比让脚本遇到 PHP 错误要高效得多。该函数通过检查代码的先决条件(所需的文件是否存在)来阻止代码执行命令。如果无法完成该操作,脚本将停止。此外,还设置了要显示的自定义错误消息。但是,不建议仅停止脚本。
如果你怀疑自己是否有能力看到代码中的内部错误,你可以使用各种PHP错误检查器。您可以在线找到它们(例如,PHP 代码检查器)或下载特定软件(例如 Phan)。一双新鲜的眼睛总是有用的,PHP 错误检查器将使 PHP 显示您没有注意到的错误。
错误处理程序是一个自定义函数,每当发生 PHP 错误时都会调用该函数。创建起来并不具有挑战性。必须注意,自定义错误处理程序必须能够处理至少两个传入其中的参数(错误消息和级别是必需的)。参数的数量可能最多达到五个,因为可能包含三个可选的参数(文件、行号和上下文)。
让我们看一下语法示例:err_function(err_level,err_message, err_file,err_line,err_context)
例复制
<?php $text1 = "Learning PHP"; $text2 = "ALL the PHP"; $var1 = 58; $var2 = 4; print "<h6>" . $text1 . $text2 . "</h6>"; print $var1 + $var2;?>
下表包含您可以添加的参数:
参数 | 描述 |
---|---|
error_level | 必填。用于指示报表级别的数值。 |
error_message | 必填。发生错误时输出的字符串值。 |
error_file | 自选。发生错误的文件的名称。 |
error_line | 自选。发生错误的行的编号。 |
error_context | 自选。用于指定使用哪些变量、文件和函数发生错误。 |
查看下表。它将解释错误报告可能列出的不同 PHP 错误级别:
价值 | 不断 | 描述 |
---|---|---|
2 | E_WARNING | 次要的非致命错误,在运行脚本时发生,并且不会停止脚本。 |
8 | E_NOTICE | 这包括运行时通知,其中可能包括小错误和正常运行脚本时可能收到的通知。 |
256 | E_USER_ERROR | 用户生成的致命错误。与E_ERROR非常相似,由脚本作者通过调用 trigger_error() 函数进行设置。 |
512 | E_USER_WARNING | 用户生成的非致命警告。与E_WARNING非常相似,由脚本作者通过调用 trigger_error() 函数进行设置。 |
1024 | E_USER_NOTICE | 用户生成的通知。与E_NOTICE非常相似,由脚本作者通过调用 trigger_error() 函数进行设置。 |
4096 | E_RECOVERABLE_ERROR | 可以捕获的致命错误。但是,与E_ERROR非常相似,ir可以通过用户定义的错误处理程序捕获,该处理程序可以使用set_error_handler()函数进行设置。 |
8191 | E_ALL | 每个错误和警告(E_STRICT在 PHP 5.4 版本中成为E_ALL的一部分) |
让我们尝试创建一个基本的 PHP 错误处理函数:
例复制
function custom_error($err_no, $err_str) { echo "<b>Error caught!</b> [$err_no] $err_str<br>"; echo "Script end!"; die(); }
触发后,此函数获取错误级别和消息,然后输出并终止代码。
现在我们有了处理 PHP 错误的自定义方法,我们需要指定何时应该使用它。
PHP 中有一个默认的内置错误处理程序。但是,我们将使我们自定义的错误处理程序成为默认处理程序。
我们应该记住,错误处理程序可能专门用于某些错误,允许我们处理特定的错误。在这种情况下,我们的处理程序将使 PHP 显示所有检测到的错误:
例复制
set_error_handler("custom_error");
鉴于此错误处理程序是为所有错误设计的,只需要保存一个参数:第二个参数的目的是指定此特定处理程序将应用于的错误级别,而我们的处理程序是通用的(因此,不需要规范)。set_error_handler()
我们可以通过传递当前上下文中不存在的变量来测试错误处理程序。
例复制
<?php //error handler function function custom_error($err_no, $err_str) { echo "<b>Error caught!</b> [$err_no] $err_str"; } //set error handler set_error_handler("custom_error"); //trigger error echo($test);?>
所需的输出使 PHP 显示发生的错误:Error: [8] Undefined variable: test
在处理用户输入时,每当使用非法输入时触发 PHP 错误通常很方便。您可以使用该函数执行此操作。trigger_error()
请看下面的例子。脚本将检查变量。如果它满足所需的条件(大于 1),则脚本会发出 PHP 显示错误:$test
例复制
<?php $test = 3; if ($test >= 1) { trigger_error('The value has to be 1 or lower'); }?>
这是我们应该得到的输出:Notice: Value has to be 1 or lower in C:\dir\error_handling.php on line 6
按照以下步骤,您可以在脚本中的任何位置触发 PHP 错误。第二个参数将允许您设置发生的错误的级别。
现在,在此示例中,如果碰巧满足与上一示例中相同的条件,则设置为发生。生成时,我们将使用用户定义的错误处理程序来终止脚本:E_USER_WARNING
$test
E_USER_WARNING
例复制
<?php //error handler function function custom_error($err_no, $err_str) { echo "<b>Error caught!</b> [$err_no] $err_str<br>"; echo "Script end"; die(); } //set error handler set_error_handler('custom_error', E_USER_WARNING); //trigger error $test = 3; if ($test >= 1) { trigger_error('Value has to be 1 or lower', E_USER_WARNING); }?>
这是我们应该得到的输出:Error caught! [512] Value has to be 1 or lower
Script end
我们已经介绍了创建错误处理程序和触发 PHP 错误,因此让 PHP 显示所有错误现在相当清晰。让我们仔细看看它们的记录方式。
默认情况下,在PHP中,错误日志被发送到服务器或文档的日志记录系统中,这取决于php.ini文件中错误日志的配置。通过使用名为 PHP 的函数,您可以修改错误日志的发送位置。error_log()
许多开发人员建议通过电子邮件将错误日志发送给自己。这样,无论何时检查电子邮件,您都可以看到网站上发生的事情。在下面的示例中,我们设置了一个 PHP 错误处理程序,以便在捕获错误时向我们发送电子邮件:
例复制
<?php //error handler function function custom_error($err_no, $err_str) { echo "<b>Error caught!</b> [$err_no] $err_str<br>"; echo "Site owner notified"; error_log("Error caught! [$err_no] $err_str", 1, "someonesomeone@example.com", "From: errorhandler@example.com"); } //set error handler set_error_handler('custom_error', E_USER_WARNING); //trigger error $test = 2; if ($test >= 1) { trigger_error('Value has to be 1 or lower', E_USER_WARNING); }?>
这是我们应该得到的输出:Error caught! [512] Value has to be 1 or lower
Site owner notified
消息可能如下所示:PHP Error Handling Example #14
但是,小错误会定期发生,因此让默认日志记录系统记录它们可能更实用。
任何允许用户输入的应用程序都需要开发人员知道如何处理错误。
在非法输入的情况下触发错误很方便。
分配消息并指定检测到的错误的简单条件语句可被视为基本错误处理程序。消息以放置在输入字段旁边的空字符串显示。
使用 PHP 函数,可以修改错误日志的目的地。error_log()
声明提示:若要转载请务必保留原文链接,申明来源,谢谢合作!
广告位
广告位