我应该如何处理 PHP 中的错误处理?特别是用户输入

How should I approach error handling in PHP? Specifically user input

我已经使用 PHP 很长时间了,我非常喜欢它。但是,我注意到我的错误处理不是很到位,对于我正在从事的新项目,我想采用适当的错误处理方法。

我想知道如何具体处理用户输入,但也想知道更普遍的任何错误。

我有一个例子如下:

function check_email($email){
   if(empty($email)){
      $error='You must enter an email address';
      error_log($error);
      header('Location: page.php?error='.$error);
      exit();
   }
   if( *doesn't match regex* ){
      $error='Not a valid email format';
      error_log($error);
      header('Location: page.php?error='.$error);
      exit();
   }
}

我希望既能将错误消息返回给用户,又能将其记录在 error_log 文档中。

上面的方法很好用,但是代码超级乱,至少给人的感觉是乱的。有什么想法可以清理吗?我想高效地使用它,因为易于编写的错误捕捉器意味着我会写更多的错误捕捉器而不是偷懒

编辑:是的,我可以将其包装在它自己的函数中

function er($error){
   error_log($error);
   header ('Location:...);
}

当然有更优雅的本机解决方案吗?

我利用下面的评论提出了两个单独的函数来处理软错误和返回用户错误

对于用户错误:

function return_error($msg){
    $_SESSION['error']=$msg;
    header("location:javascript://history.go(-1)");
    exit;
}

对于软错误/异常行为(make_file() 函数只创建一个文件,如果不存在)

function soft_error($e){
    $trace=debug_backtrace(-1);
    if(isset($trace,$trace[0],$trace[0]['file'],$trace[0]['line'])){
        $file=BASE_DIRECTORY.'logs/soft_error.log';
        make_file($file);
        $log=fopen($file,'a');
        fwrite($log,'['.date('Y-m-d H:i:s').'] File: '.$trace[0]['file'].' - Line: '.$trace[0]['line'].' - Error: '.$e.PHP_EOL);
        fclose($log);
    }
}

对于硬错误,有 error_log() 或者它们会根据服务器设置自动记录,所以没关系