프로그래밍 언어/PHP

PHP 치명적 (`E_ERROR`) 오류를 잡는 방법

Rateye 2021. 6. 30. 10:45
728x90
반응형
질문 : PHP 치명적 (`E_ERROR`) 오류는 어떻게 잡나요?

set_error_handler() 를 사용하여 대부분의 PHP 오류를 잡을 수 있지만 존재하지 않는 함수 호출과 같은 E_ERROR 이러한 오류를 포착하는 다른 방법이 있습니까?

mail() 을 호출하고 PHP 5.2.3을 실행하고 있습니다.

답변

PHP 5.2 이상이 필요한 register_shutdown_function 사용하여 치명적인 오류를 기록합니다.

register_shutdown_function( "fatal_handler" );

function fatal_handler() {
    $errfile = "unknown file";
    $errstr  = "shutdown";
    $errno   = E_CORE_ERROR;
    $errline = 0;

    $error = error_get_last();

      if($error !== NULL) {
        $errno   = $error["type"];
        $errfile = $error["file"];
        $errline = $error["line"];
        $errstr  = $error["message"];

        error_mail(format_error( $errno, $errstr, $errfile, $errline));
  	}
}
                                          

error_mailformat_error 함수를 정의해야합니다. 예를 들면 :

function format_error( $errno, $errstr, $errfile, $errline ) {
    $trace = print_r( debug_backtrace( false ), true );
    
    $content = "
                <table>
                <thead><th>Item</th><th>Description</th></thead>
                <tbody>
                <tr>
                <th>Error</th>
                <td><pre>$errstr</pre></td>
                </tr>
                <tr>
                <th>Errno</th>
                <td><pre>$errno</pre></td>
                </tr>
                <tr>
                <th>File</th>
                <td>$errfile</td>
                </tr>
                <tr>
                <th>Line</th>
                <td>$errline</td>
                </tr>
                <tr>
                <th>Trace</th>
                <td><pre>$trace</pre></td>
                </tr>
                </tbody>
                </table>";
    return $content;
}
                                                                                                                

Swift Mailer 를 사용 error_mail 함수를 작성하십시오.

또한보십시오:

출처 : https://stackoverflow.com/questions/277224/how-do-i-catch-a-php-fatal-e-error-error
728x90
반응형