2012-02-11 5 views
2

스크립트를 종료 할 수 있습니까? 예를 들어 치명적인 오류가 발생해도 여전히 내 버퍼를 출력 할 수 있습니까? header/content/footer를 실행하는 템플릿 시스템을 사용하고 있습니다. 그래서 코드를 fatal_error() 함수에서 실행을 멈추게 할 것이지만 여전히 웹 사이트 템플릿을 유지하면서 사용자에게 오류 메시지를 보내는 버퍼 템플릿을 출력합니다. ob_start("ob_gzhandler")을 사용하고 내 fatal_error() 함수에 나는 ob_flush()을 사용하고 fatal_error()이 호출 될 때 나는 흰 화면으로 끝난다. 여기 제 기능PHP 종료 및 여전히 출력 버퍼

function fatal_error($error_message, $log = true) 
{ 
    setup_error($error_message); 

    ob_flush(); 
    exit(); 
} 

setup_error()는 (오류가 발생했을 때 그래서 1/2 몸을 구문 분석하지 않습니다) 오류 메시지에 대한 내용 몸을 변경할 수있는 스크립트를 알려줍니다이다. 내가 보았던 모든 예는 ob_flush() 또는 ob_end_flush()이라고 할 수 있습니다. 행운이 없습니다.

답변

4

set_error_handler() 기능을 사용하십시오. 이 경우 PHP가 오류가 발생하면 fatal_error() 사용자 정의 함수를 실행할 수 있습니다. 버퍼를 비우고 종료하는 등 원하는 기능을 할 수 있습니다.

편집 :

다음 코드는 당신이 원하는 것을 수행해야합니다

set_error_handler('fatal_error', E_ERROR, E_USER_ERROR); 

function fatal_error($errno, $errstr, $errfile, $errline) 
{ 
    ob_flush(); 
    exit(); 
} 

편집 2 : 당신은 E_ERROR를 트리거하기 때문에 그래서 같은 fatal_error() 기능을 테스트 할 수 있습니다

:

trigger_error('This is a test error', E_ERROR); 
+0

골든. 고맙습니다. –

+0

당신은 환영합니다 :) – VettelS

2

ob_flush() 앞에 이라는 전화 번호를 추가하려고합니다. 때때로 둘 다 필요합니다.

+0

흠, 여전히 유일한 흰색 화면 출력 –

+0

'setup_error()'의 코드를 볼 수 있습니까? –

+0

'ob_flush'이후까지 템플릿이 출력되지 않았습니다. 나는 그걸 보았다. –