2013-02-27 5 views
1

내 응용 프로그램에서 여러 jQuery AJAX 호출을 사용하고 500 내부 서버 오류와 같은 AJAX 호출 중에 오류가 발생할 수 있습니다. 오류의 맨 아래로 가려면 서버에 로그인하여 PHP 오류를 제공하는 오류 로그를 확인하십시오.PHP 스크립트 AJAX 오류보고

나는 이러한 오류가 발생했을 때 알림을 받고 오류를 일으킨 PHP 오류가 무엇인지 찾고 있습니다. 적어도 사용자로부터 전자 메일을 수신하고 로그를 확인하는 대신 알림을받는 방법.

이 튜토리얼은 AJAX 오류 (http://net.tutsplus.com/tutorials/php/quick-tip-email-error-logs-to-yourself-with-php/)와 통합하는 방법을 잘 모르겠지만 PHP 오류 또는 500 내부 서버 오류가 반환되는지 확실하지 않습니다.

아이디어, 기존 서비스 또는 솔루션에 큰 감사드립니다!

$.ajax ({ 
     url: report, 
     cache: false, 
     success: function(html) { 
      // continue with event 
     }, 
     error: function(x, status, error) { 
      // report error here 
     }, 
     async:true 
}); 

편집 : 여기

인 PHP는 오류 통지에 AJAX 요청을하게 업데이트 된 AJAX 호출 ...

$.ajax ({ 
     url: report, 
     success: function(html) { 
      // success 
     }, 
     error: function(x, status, error) { 
      $.ajax ({ 
       url: 'admin/error_notification.php', 
       type: "POST", 
       data:{ 
        error: error 
       } 
      }); 
     }, 
     async:true 
}); 
여기 내 AJAX 중 하나가 예를 들어 호출입니다

이것은 훌륭하지만, AJAX 오류의 원인이 된 실제 PHP 오류 대신 내부 서버 오류가 발생했다고보고합니다. 여기에 PHP 오류 처리 파일입니다

$error = $_POST['error']; 
$sysadmin_message = $error; 
$sysadmin_to = '[email protected]'; 
$sysadmin_subject = 'Error Notification'; 
$sysadmin_headers = "From: Site <[email protected]>\r\n"; 
$sysadmin_headers .= "MIME-Version: 1.0\r\n"; 
$sysadmin_headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
mail($sysadmin_to, $sysadmin_subject, $sysadmin_message, $sysadmin_headers); 

분명히 이것은 단지보고 AJAX 오류를 보낼 것입니다,하지만 어떻게 내가 알림에 실제로 PHP 오류를 추가하는 방법은 무엇입니까?

+0

php.ini 파일에서 display_errors가 "On"으로 설정되어 있습니까? – ContextSwitch

+0

이 아닌 경우 "On"으로 설정 한 다음 오류가 사용자에게 표시되지 않도록 각 비 아약스 페이지에서 오류보고 수준을 설정하십시오. – ContextSwitch

+0

여전히 try/catch가 더 나은 솔루션이라고 생각합니다. 그래도 – ContextSwitch

답변

3

당신은 프론트 엔드에서 PHP

에보고 오차 함수의 내부에 두 번째 아약스 전화를해야합니다 :

$.ajax ({ 
     url: report, 
     cache: false, 
     success: function(html) { 
      // continue with event 
     }, 
     error: function(x, status, error) { 
      // report error here 
      $.ajax ({ 
       url: errorlogUrl, 
       data:{ 
        message:'ajax error from [report]' 
       } 
      }); 
     }, 
     async:true 
}); 

또는 백엔드에 시도/catch 문을 사용

try{ 
    // code that might throw an error 
} 
catch(Exception $e){ 
    // send notification based on the content of $e 
} 
+0

오류가 발생하도록 설정하면 좋지만 내부 서버 오류가 발생한 것으로보고됩니다. 나는 여전히 실제 PHP 오류에 대한 로그 파일을 확인해야합니다. 어쨌든 AJAX 오류시 PHP 오류가 발생합니까? –

+0

서버가 HTTP 500을 리턴하지 않은 경우 아닙니다. php.ini 파일을 displayErrors = On으로 변경할 수 있으며, 실제 오류를 표시합니다. dev 환경에서만 그렇게 할 수 있습니다. 제작을위한 좋은 아이디어는 아닙니다. 왜 그냥 PHP의 오류 로그를 사용하지? – ContextSwitch

+0

죄송합니다. 질문을 다시 읽으십시오. try catch 블록을 사용하여 PHP에서 치명적인 오류를 잡아 내고 catch에 알림을 보낼 수도 있습니다. 내 대답 업데이트 – ContextSwitch