【问题标题】:User-Friendly PHP Error Message用户友好的 PHP 错误消息
【发布时间】:2013-11-01 12:04:25
【问题描述】:

PHP 以显示丑陋的错误消息而闻名,尽管它们有时很有用。我知道我可以用

隐藏错误消息
error_reporting(0);

这很好,但它让用户完全不知道发生了什么。该页面已停止工作,他们不知道为什么。如何显示“抱歉,出现错误。请发送电子邮件给网站管理员”这样的简单消息?

对于所有错误,这将是相同的消息,我正在考虑可能会弹出一个 javascript 警报,但对任何其他想法持开放态度。

【问题讨论】:

标签: php error-handling


【解决方案1】:

有一些规则应该适用于生产服务器:

  1. 永远不要向他们显示原始的 PHP 错误消息!设置display_errors = off。
  2. 记录这些错误。设置log_errors = on 并在error_log 中定义一个有效的日志目标。
  3. 监控错误日志并对其采取行动。 :)

对用户端的错误处理,其他人已经充分回答了。

【讨论】:

  • 我不能声称过去一直遵守这些规则,但我打算从现在开始。这就是我问这个问题的原因。
【解决方案2】:

实现错误和异常处理程序

您需要编写一个像这样的自定义错误处理程序。正如你在底部看到的,我引入了一个 FATAL 错误。在这里,PHP 不会像您引用的那样吐出任何丑陋的错误消息。它只会打印Some Error Occured. Please Try Later.

<?php

set_error_handler( "log_error" );
set_exception_handler( "log_exception" );
function log_error( $num, $str, $file, $line, $context = null )
{

    log_exception( new ErrorException( $str, 0, $num, $file, $line ) );
}

function log_exception( Exception $e )
{

echo "Some Error Occured. Please Try Later.";
exit();
}

require_once("texsss.php");// I am doing a FATAL Error here

【讨论】:

  • 看起来不错。只有一个问题:错误不会出现在正常的错误日志中。 (如果我注释掉自定义错误处理程序,它会起作用。)它是否将它记录在其他地方?
【解决方案3】:

您可以编写自定义错误处理程序来完成它

http://php.net/manual/en/function.set-error-handler.php

【讨论】:

    【解决方案4】:

    这通常通过异常来完成。如果出现问题,您会抛出异常,然后使用exception handler“处理”。

    function exception_handler($exception) {
      echo "Oops! Something went wrong! We're looking into it!";
    }
    
    set_exception_handler('exception_handler');
    
    throw new Exception('Uncaught Exception');
    

    您还可以使用register_shutdown_function 捕获许多致命错误。

    set_error_handler 也可能会让你心动。

    【讨论】:

      【解决方案5】:

      用户自定义错误处理set_error_handler

      和异常处理程序set_exception_handler

      在那里你可以做任何你喜欢的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 1970-01-01
        • 2020-11-25
        • 2016-12-15
        • 1970-01-01
        • 2012-10-08
        相关资源
        最近更新 更多