簡體   English   中英

PHP的自定義錯誤處理程序如何在生產中打印錯誤?

[英]php custom error handler how to print error in production?

我有一個接口,通過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:

....

}

您需要讓客戶端的ajax處理程序知道返回的值實際上是一條錯誤消息,最好使用狀態標頭來做到這一點:

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

然后,針對每個ajax請求全局設置或單個設置設置將處理錯誤的函數。 在jQuery中,如何全局執行: http : //api.jquery.com/ajaxError/或單獨設置ajax請求的“錯誤”選項。

似乎現在已經用這個mod打印了:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM