创建脚本和Web应用程序时,错误处理是必不可少的部分。在任何程序中都没有错误处理代码,该程序似乎是不专业的,并且有潜在的安全风险。
处理PHP中的错误并不复杂且必要,因此程序知道遇到此类错误时应采取适当的措施。
有三种主要的错误检查方法,
die()函数
自定义错误检查
报告错误
die()
方法此功能允许在发生特定错误时显示用户友好的消息。这允许程序与用户之间更好的交互。
例如,有一个代码找不到的文件。然后,它会打印出一个令人困惑和复杂的错误。
程序:
<?php //尝试打开一个文件 //在系统中不存在 $file=fopen("technology.txt","r"); ?>
输出:
PHP Warning: fopen(technology.txt): failed to open stream: No such file or directory in /home/jdoodle.php on line 4
因此,如果找不到文件,为了更好地显示错误消息,可以编写以下程序,
程序:
<?php //检查文件名 if(file_exists("technology.txt")) { $file = fopen("technology.txt", "r"); } else { //如果找不到该文件,将显示消息 die("Error: The mentioned file was not found"); } ?>
输出:
Error: The mentioned file was not found
我们可以通过简单地创建函数来检查和自定义错误检查。存在错误时将调用它。
参数中至少需要传递两个参数。一种是错误级别,另一种是消息。最多可以一次传递五个参数。
语法:
function_name(level,message,error_file,line,context)
参数:
function_name:处理错误的错误函数的名称。
level:一个数字,指定错误的级别。
消息:需要显示的消息
Error_file(可选):提及发生错误的文件的名称。
Line(可选):提及发生错误的行号
Context(可选):包含所有正在使用的变量及其值的数组
这是在尝试打印不存在的变量时进行自定义错误检查的程序。
程序:
<?php //错误处理功能 function catching_Error($no, $str) { echo "<b>Error:</b> [$no] $str"; } //设置错误处理程序 set_error_handler("catching_Error"); //错误触发功能 echo($uu); ?>
输出:
<b>Error:</b> [8] Undefined variable: uu
trigger_error()函数
如果该函数或任何代码接收到逻辑上不正确的数据,则可以使用trigger_error()函数显示消息。
例如,老师只想招收那些安全性超过合格分数的学生,然后可以编写以下代码。
程序:
<?php //接受用户输入的标记 $marks=(int)readline('Enter the marks :'); if ($marks<=50) { trigger_error("Repeat this class since you are fail"); } ?>
输出:
Enter the marks :43 PHP Notice: Repeat this class since you are fail in /home/jdoodle.php on line 5
通过使用函数error log()可以向特定文件或远程目标发送错误日志消息。
有什么比发送一封包含所发生错误描述的电子邮件更好呢?
程序:
<?php //检查错误的功能 function checking_errors($no, $str) { echo "Error: [$no] $str"; echo "technology has been notified"; error_log("Error: [$no] $str",1, "[email protected]","From:[email protected]"); } //设置错误处理程序 set_error_handler("checking_errors",E_USER_WARNING); //触发错误 $marks=43; if ($marks<=50) { trigger_error("Repeat this class since you are fail",E_USER_WARNING); } ?>
输出:
Error: [512] Repeat this class since you are failtechnology has been notifiedThe mail received by the user will beError: [512] Repeat this class since you are fail