【问题标题】:php custom error handler how to print error in production?php自定义错误处理程序如何在生产中打印错误?
【发布时间】:2014-01-10 14:21:54
【问题描述】:

我有一个通过 ajax 调用一些 php 函数的接口。

我只在生产中发现了一个未发现的错误。由于我大量使用 getJson 数据交换,我需要使用自定义 php 错误处理程序来消除错误和警告。

问题是,无论如何,当代码在生产中产生错误时,我希望将其打印给用户,以了解问题出在哪里。我的代码是:

function myErrorHandler($errno, $errstr, $errfile, $errline)
{

switch ($errno) {
case E_ERROR:
    case E_USER_ERROR:
    $error= "<b>My ERROR</b> [$errno] $errstr<br />\n";
    $error.= "  Fatal error on line $errline in file $errfile";
    $error.= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
    $error.= "Aborting...<br />\n";
    if(isAjaxCalling()){
        $_SESSION['Errors']['Errors'][]=$error;
    }

    ini_set('display_errors',1);
    ini_set('error_reporting','E_ALL');
    echo $error;
    exit(1);
    break;
case E_WARNING:
case E_USER_WARNING:

....

}

【问题讨论】:

  • 1 - 我认为你需要删除 ini_set('display_errors',1); ini_set('error_reporting','E_ALL'); 2 - 为什么不将 $error 保存在 txt 文件中或通过电子邮件发送?
  • E_ALL 是常量,不要用引号括起来。它变成 0 然后 => 没有错误报告。
  • E_ALL 也可以作为字符串使用

标签: php ajax json error-handling


【解决方案1】:

您需要让客户端的ajax处理程序知道返回的值实际上是一条错误消息,最好使用状态标头:

header("HTTP/1.0 500 Internal server error");

然后根据 ajax 请求全局或单独设置处理错误的函数。在 jQuery 中,如何全局处理:http://api.jquery.com/ajaxError/ 或单独设置 ajax 请求的 'error' 选项。

【讨论】:

  • 对不起,但问题是服务器没有打印错误,在链接中它是如何由客户端上的 jquery 管理的?
【解决方案2】:

现在好像用这个模组打印出来了:

case E_ERROR:
case E_USER_ERROR:
$error= "<b>My ERROR</b> [$errno] $errstr<br />\n";
$error.= "  Fatal error on line $errline in file $errfile";
$error.= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
$error.= "Aborting...<br />\n";
if(isAjaxCalling()){
    $_SESSION['Errors']['Errors'][]=$error;
}

exit( $error);
break;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 2018-04-29
    • 2011-06-01
    相关资源
    最近更新 更多