2017-01-02 1 views
0

단일 페이지 응용 프로그램에 AngularJ를 사용하고 JSON을 통해 서버 측 PHP와 통신합니다. PHP는 헤더는 JSON을 설정하지만 PHP에서 오류보고 :일반 내용 유형을 준수하는 JSON 형식의 PHP 오류를보고하십시오.

php_flag display_errors 1 
php_flag display_startup_errors 1 
php_value error_reporting 32767 

은 HTML과 header('Content-Type: application/json;charset=utf-8');
따라서 지속적으로 AngularJS와 일반 답의 content-type 헤더와 일치하지 않는 것은 PHP는 오류를 발생합니다. multicontent types을 사용해야합니까? 아니면 무엇을해야합니까?

enter image description here

답변

1

클라이언트 측에 PHP 오류/예외를 반환해야하는 경우 (권장되지는 않지만 개발하기가 쉽다) PHP 용 사용자 정의 error/uncaught-exception 처리기가 필요합니다. 이렇게하면 오류/예외가 표시되는 방식을 사용자 정의 할 수 있습니다.

다음은 오류 및 캐치되지 않은 예외를 JSON 객체로 출력하는 샘플 코드입니다.

// Set error handler 
set_error_handler('api_error_handler'); 

function api_error_handler($errno, $errstr) { 
    return api_error($errstr, $errno, 500);  
} 

// Set uncaught exceptions handler  
set_exception_handler('api_exception_handler'); 

function api_exception_handler($exception) { 
    return api_error($exception->getMessage(), $exception->getCode(), 500); 
} 

// Error/Exception helper 
function api_error($error, $errno, $code) { 
    // In production, you might want to suppress all these verbose errors 
    // and throw a generic `500 Internal Error` error for all kinds of 
    // errors and exceptions. 
    if ($environment == 'production') { 
     $errno = 500; 
     $error = 'Internal Server Error!'; 
    } 

    http_response_code($code); 
    header('Content-Type: application/json'); 

    return json_encode([ 
     'success' => false, 
     'errno' => $errno, 
     'error' => $error, 
    ]); 
} 

그러나 그것은 모두가 아니다; 사용자 정의 오류 처리기는 치명적인 오류를 처리 할 수 ​​없기 때문에 여전히 치명적인 오류 메시지가 표시됩니다. 당신은 ini_set()에 대한 호출을 표시하는 오류를 해제해야합니다

ini_set('display_errors', 0); 

는 어떻게 치명적인 오류를 처리하기 위해? 치명적인 오류는 종료시 register_shutdown_function()으로 처리 할 수 ​​있습니다. 종료 처리기에서 error_get_last()을 호출하여 마지막 오류 정보를 가져와야합니다. 따라서 :

그런 다음 자바 스크립트 측면에서 오류 콜백을 추가하고 오류 정보를 사용자에게 표시해야합니다.

결국, 모두 구현하는 대신 성숙한 오류/예외 처리기 패키지를 사용하지 않으시겠습니까? 만나십시오 Whoops.

2

왜 당신은 당신의 응용 프로그램에 대한 PHP 오류에 의존? 가능한 경우 오류를 발생시키는 코드 부분을 제공하십시오.

JSON 결과를 반환해야하는 경우 클린 종료 대신 응용 프로그램을 중지하려면 PHP 오류를 사용하지 마십시오. try...catch 패턴을 사용하거나 실제로 호출하기 전에 오류를 발생시키는 문을 검사 할 수 있습니다 (예 : 실행과 함께 계속 진행할 수 있는지 확인).

여기 보라 :

최종 응용 프로그램에서 오류를 해제 기억 : 그들은 공격자에게 많은 정보를 누출 할 수 (및 또한, 그들은 단순히 끔찍한 보입니다.)

+0

코드는 괜찮습니다. 구문 분석 된 json에서 PHP 오류를보고 편의를 위해 각도 표현을 바로 볼 수 있습니다. 정보 유출에 대한 좋은 힌트. – ItsmeJulian