당신은 set_error_handler()
으로도 사용되지 않는 오류 메시지를 추적 할 수 있습니다. 사용자가 설명하는 문제점은 오류 처리 기능을 등록한 전에 전에 이러한 보증 메시지가 제공된다는 것입니다.
사용자가 이름을 지정한 두 개의 메시지는 구문 분석시에 제공됩니다. 즉, 오류 처리 함수를 너무 늦게 등록하면 더 이상 처리 할 수 없습니다 (통과했기 때문에).
해결책은 매우 간단합니다. 오류 처리기를 에 등록한 후에에이 파일을 구문 분석하십시오. 작업 예 :
파일 error-handler-deprecated-include.php
:
<?php
# 1. Assigning the return value of new by reference is now deprecated.
$var = &new stdClass();
# 2. Call-time pass-by-reference is now deprecated
trim(&$var);
파일 error-handler-deprecated.php
: 오류 핸들러가 볼 수
<?php
$handler = function($errno, $errstr, $errfile, $errline) {
echo "Error: ", var_dump($errno, $errstr, $errfile, $errline),
"-----------------------------------\n";
};
echo 'set_error_handler() [previous handler]: ',
var_dump(set_error_handler($handler));
# test 1. and 2. by including the code *after* the error handler has been set
include('error-handler-deprecated-include.php');
는 PHP 5.3에서 php error-handler-deprecated.php
실행 후, 다음과 같은 출력을 생성합니다 다른 오류 옆에 비추천 메시지를 모두 처리 :
set_error_handler() [previous handler]: NULL
Error: int(8192)
string(60) "Assigning the return value of new by reference is deprecated"
string(98) "error-handler-deprecated-include.php"
int(7)
-----------------------------------
Error: int(8192)
string(47) "Call-time pass-by-reference has been deprecated"
string(98) "error-handler-deprecated-include.php"
int(10)
-----------------------------------
Error: int(2)
string(53) "trim() expects parameter 1 to be string, object given"
string(98) "error-handler-deprecated-include.php"
int(10)
-----------------------------------
그냥 추측 : 아마도 둘 다 기능이 아니기 때문에 가능하지만 언어 구조이기 때문일 수 있습니다. – KingCrunch
그 차이점을 알았지 만 error_get_last()를 호출하여 오류 정보에 액세스 할 수 있다는 것이 여전히 이상하게 보입니다. 이는 다른 어떤 오류처럼 기록되고 있음을 나타냅니다. 그리고 E_DEPRECATED의 err_num을가집니다. – benr