2012-05-24 4 views
0

안녕하세요 여러분, 아마 쉬운 질문입니다.PHP 사용자 정의 오류 처리기

getJson 호출에서 알림을보고하고 응답의 json 형식에 대한 규칙을 위반하지 않도록 사용자 지정 오류 처리기가 필요합니다.

그래서 내가 세션 변수의 모든 통지를 수집 생각하고 스위치가

<?php 
session_start(); 

function myErrorHandler($errno, $errstr, $errfile, $errline) { 
if (!(error_reporting() & $errno)) { 
    // This error code is not included in error_reporting 
    return; 
} 

switch ($errno) { 
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"; 
    $_SESSION['Errors']['Errors'][]=$error; 
//exit(1); 
    break; 

case E_USER_WARNING: 
    $_SESSION['Errors']['Warning'][] = "<b>My WARNING</b> [$errno] $errstr<br />"; 
    break; 

case 8: // notice 
    if(isset($_REQUEST['ajax']) || isset($_REQUEST['ajaxAccess']))   { 
     $_SESSION['Errors']['Notice'][]="<b>My NOTICE</b> [$errno] $errstr $errfile $errline<br />"; 
     //json_encode($_SESSION); 
     } 

//  else $error.= "<b>My NOTICE</b> [$errno] $errstr $errfile $errline<br />\n"; 
    break; 

default: 
//  $error.= "Unknown error type: [$errno] $errstr<br />\n"; 
    break; 
} 

/* Don't execute PHP internal error handler */ 
return true; 
} 

$old_error_handler = set_error_handler("myErrorHandler"); 

문제의 $의 errno는 어떤 옵션을 캐치하지 않았던 내 오류 처리기에서 응답

의로 json_encode에 추가 숫자이며 임의의 옵션과 일치하지 않습니다

구성에서 문자열을 변경하여 작동하도록 설정해야합니까?

감사합니다.

답변

1

코드는 trigger error()에 대한 호출로 인해 발생한 오류 만 처리합니다. 일반적인 PHP 함수와 액션에 의해 던져지는 에러를 잡으려면, 특히 E_WARNINGE_NOTICE (여러분은 E_ERROR을 처리 할 수 ​​없습니다)과 같은 상수를 처리해야합니다.

당신은 쉽게 switch뿐만 아니라 일치하도록 수정할 수 있습니다 답장을 보내

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

    if (!(error_reporting() & $errno)) { 
    // This error code is not included in error_reporting 
    return; 
    } 

    switch ($errno) { 
    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"; 
     $_SESSION['Errors']['Errors'][] = $error; 
     // exit(1); 
     break; 
    case E_WARNING: 
    case E_USER_WARNING: 
     $_SESSION['Errors']['Warning'][] = "<b>My WARNING</b> [$errno] $errstr<br />"; 
     break; 
    case E_NOTICE: 
    case E_USER_NOTICE: // notice 
     if(isset($_REQUEST['ajax']) || isset($_REQUEST['ajaxAccess']))   { 
     $_SESSION['Errors']['Notice'][] = "<b>My NOTICE</b> [$errno] $errstr $errfile $errline<br />"; 
     // json_encode($_SESSION); 
     } 
     // else $error.= "<b>My NOTICE</b> [$errno] $errstr $errfile $errline<br />\n"; 
     break; 
    default: 
     // $error.= "Unknown error type: [$errno] $errstr<br />\n"; 
     break; 
    } 

    /* Don't execute PHP internal error handler */ 
    return true; 

} 
+0

감사합니다. 그것은 _USER로 그들은 나를에 의해 촉발되고 PHP 없이는 트리거되지 않는다는 것을 의미합니다. 나는 다시 노력한다.) – giuseppe