치명적인 오류를 캡처하기 위해 클래스 내부의 함수로 OB_START를 가리키십시오.

StackOverflow https://stackoverflow.com/questions/1362112

  •  20-09-2019
  •  | 
  •  

문제

PHP에서 웹 서비스를 호출하고 반환 XML을 구문 분석하고 JSON 객체를 반환하는 일반적인 클래스를 만들려고합니다.

CURL 및/또는 JSON을 지원하지 않는 서버에서 치명적인 오류가 발생했으며 충돌하지 않고 JSON 객체의 오류를 클라이언트로 다시 돌아올 수있는 방법을 찾았습니다.
검색 후 전화 할 수있는 기사를 찾았습니다. ob_start("fatal_error_handler") 핸들러 기능을 제공합니다.

function fatal_error_handler($buffer) {
    if (ereg("(error</b>:)(.+)(<br)", $buffer, $regs) ) {
        $err = preg_replace("/<.*?>/","",$regs[2]);
        $buffer = json_encode(array("errorMessage" => "Fatal error occurred", "exceptionMessage" => $err));
    }
    return $buffer;
} 

그리고 전화 ob_end_flush 스크립트의 끝에서.
이것 잘 작동했습니다, 그러나 이제 그 기능을 수업에 추가하고 싶었습니다. 나는 다음 생성자와 소멸자를 추가하기 위해 시도하고 성공했다.

    function __construct() {
        ob_start("fatal_error_handler");
    }

    function __destruct() {
        ob_end_flush();
    }

그러나 핸들러 기능을 클래스로 옮기려고했을 때 추가 할 수있는 방법은 없었습니다. ob_start() 전화. 나는 시도했다 ob_start("$this->fatal_error_handler"), 그리고 ob_start("WebService::fatal_error_handler") (WebService는 내 클래스 이름입니다) - 아무 소용이 없습니다.

내 질문은, 클래스 함수의 이름을 어떻게 전달합니까? ob_start 내 생성자에 포함되어 있습니까?

보너스 질문 : 내가이 일을 제대로하고 있습니까, 아니면 고객이 처리 할 수있는 방식으로 치명적인 오류를 다루는 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

ob_start(array($this, 'fatal_error_handler'));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top