2010-02-16 6 views
4

나는 PHP 5에서 에러를 예외로 변환하는 클래스를 사용했으며 에러를 파일에 기록하고/또는 지정된 계정으로 이메일을 보냈습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 내가 아는 것이 더 좋다는 것에 대해 뭔가가 있습니다. 나는 set_error_handler를 사용하고있다.PHP의 전역 오류 처리에 대한 유용한 정보가 있습니까?

set_error_handler("exception_error_handler"); 

내 코드는 오류가 기록되고 이메일을 보내야하지만 최선의 방법으로 처리하고 있습니다. 데이터 연결을 오류가 있다고 가정 할 때 데이터베이스에 기록하는 것이 더 낫습니다. 웹 사이트의 업계 표준은 무엇입니까?

+2

refactormycode.com 당신은 set_error_handler''으로 오류 처리기를 설정해야 –

+0

. 그렇지 않으면 귀하의 질문은 무엇입니까? 코드가 원하지 않는 것은 무엇입니까? 더 구체적으로 말하십시오. – meagar

답변

6

오류를 처리하기위한 코드는 절대적으로 방탄해야합니다.

때때로 당신이 테스트를 잊어 버린 정말 모호한 이유 때문에 시작될 수도 있지만 코드의 버전을 통해 고뇌를 겪을 때도 실행되기를 원합니다.

출력을 데이터베이스에 쓰면 코드에 대한 의존성이 커지고 데이터베이스가 없으면보고되는 문제의 주요 원인이 될 가능성이 큽니다.

메일에 의존하는 것은 여전히 ​​의존성이지만 시스템 정지가 발생할 경우 가장 당면한 목표는 시스템을 다시 작동시키는 것입니다. 따라서 이메일을 보내면 뭔가를 고칠 필요가 있음을 알리는 매우 효과적인 방법입니다 .

PHP의 파일 처리 기능은 동시 액세스에 적합하지 않으므로 모든 이벤트를 로컬 로깅하는 것이 좋지만 코드에서 파일을 쓰지 말고 syslog 인터페이스를 사용하십시오. 꼭 다음에 관련 세부 사항 으로 이메일을 보내면 syslog로 보냈습니다.

HTH

C.

2

오류 처리기에 논리를 덤프하지 않습니다.

이 방법을 Kohana에서 살펴보십시오.

/** 
* PHP error handler, converts all errors into ErrorExceptions. This handler 
* respects error_reporting settings. 
* 
* @throws ErrorException 
* @return TRUE 
*/ 
public static function error_handler($code, $error, $file = NULL, $line = NULL) 
{ 
    if (error_reporting() & $code) 
    { 
     // This error is not suppressed by current error reporting settings 
     // Convert the error into an ErrorException 
     throw new ErrorException($error, $code, 0, $file, $line); 
    } 

    // Do not execute the PHP error handler 
    return TRUE; 
} 

깨끗한 방법으로 설명합니다. 이제 처리를 예외 핸들러 또는 catch 블록 내로 옮길 수 있습니다.

+0

글쎄, 코드 샘플을 가지고있을 때이 질문에 대답했지만 지금은 사라져서 내 대답이 이해가되지 않는다면 사과드립니다. –

관련 문제