치명적인 오류를 캡처하기 위해 클래스 내부의 함수로 OB_START를 가리키십시오.
-
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'));
제휴하지 않습니다 StackOverflow