2010-01-31 3 views
0

건물에있는 일부 인터페이스의 여러 위치에서 사용자 정의 오류를 던지고 싶습니다. 내 함수 내에서 에코를 사용하면 내 페이지의 태그 위에 코드가 표시됩니다. 따라서 오류를 처리하고 백 트레이스를 제공하는 사용자 지정 함수를 만들었지 만 다시 내 페이지에 인쇄됩니다. 여기 PHP : 본문 내부에 사용자 정의 오류 표시

나는 기능을 사용하고 있습니다 :

function error($msg) { 
    trigger_error($msg, E_USER_WARNING); 
    echo '<pre>'; 
    debug_print_backtrace(); 
    echo '</pre>'; 
} 

가 어떻게 내 오류 내 페이지의 태그 내부에 인쇄 할 수 있습니까?

또는 더 좋은 방법이 있습니까?

+0

본문을 출력하기 전에 '오류'메시지가 표시됩니까? 그렇다면 해결책은 인쇄 오류를 지연시키는 것입니다. – outis

+0

예. 인쇄 오류를 어떻게 지연시킬 수 있습니까? 이상이있는 경우 오류가있는 경우 항상 본문에 넣을

Errors here
을 갖고 싶습니다. –

+0

지연 인쇄 오류는 부정확합니다 (몸체가 시작되었음을 나타 내기 위해 전역 변수 (yuck) 사용) 또는 다소 복잡합니다. 복잡한 경우 doc을 출력 할 준비가 될 때까지 처리 중에 노드를 삽입 할 수있는 문서 (예 : http://php.net/DOM 사용)를 만들 수 있습니다. 하이브리드 솔루션을 만들 수 있습니다. 대상 조상 노드가 아직 인쇄를 시작하지 않을 때마다 인쇄를 지연하고, 조상의 열린 태그 (닫기 태그는 아님)가 인쇄 된 즉시 인쇄하고 조상이 닫힌 경우 다른 작업을 수행 할 수 있습니다 . – outis

답변

1

어떻게 인쇄 오류를 지연 것인가? 이상이 있으면 오류가 있으면 여기에 항상 오류가 생길 수 있습니다.

내가하고있는 일을 완전히 따라했는지는 확실하지 않지만 어쩌면 그럴 수 있습니까?

<?php 
class ErrorHandler 
{ 
    static private $errors = null; 

    static function report(... /* see set_error_handler() for params */) 
    {  
    self::$errors .= "..."; 
    return true; 
    } 

    static function getErrors() 
    { 
    return self::$errors; 
    } 
} 

set_error_handler(array('ErrorHandler', 'report')); 

// ... 

echo "<div>".ErrorHandler::getErrors()."</div> 
?> 
+1

주된 변경 사항은'ErrorHandler :: $ errors'를 배열로 바꾸고'implode'을 사용하여 항목을 결합하는 것입니다.이 경우에는 오류 메시지를 추가적으로 처리 할 수 ​​있습니다. 또한 div가 아닌 list 요소를 사용하는 것을 고려하십시오. – outis