PHP中的错误处理

PHP | 错误处理

创建脚本和Web应用程序时,错误处理是必不可少的部分。在任何程序中都没有错误处理代码,该程序似乎是不专业的,并且有潜在的安全风险。

处理PHP中的错误并不复杂且必要,因此程序知道遇到此类错误时应采取适当的措施。

有三种主要的错误检查方法,

  1. die()函数

  2. 自定义错误检查

  3. 报告错误

1)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

2)自定义错误处理功能

我们可以通过简单地创建函数来检查和自定义错误检查。存在错误时将调用它。

参数中至少需要传递两个参数。一种是错误级别,另一种是消息。最多可以一次传递五个参数。

语法:

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

3)错误记录

通过使用函数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