2011-09-13 5 views
0

코드베이스를 PHP 5.2에서 5.3으로 업그레이드 중입니다. 이 일환으로 나는 더 이상 사용되지 않는 기능과 기능의 사용을 전환 중입니다. split 및 spliti와 같이 deprecated 함수를 사용하면 set_error_handler()을 호출하여 설정 한 오류 처리기가 호출되며 로그 메시지가 표시됩니다. 이것은 위대합니다.php deprecated 기능 (deprecated 함수가 아닌)이 error_handler 함수를 호출하는 이유는 무엇입니까?

그러나, 나는 다음과 같은 두 가지 사용되지 않는 기능 사용 참조 새의 반환 값을 할당

  1. 는 이제 사용되지 않습니다.
  2. 이제는 참조로 전달되는 호출 시간이 더 이상 사용되지 않습니다.

오류 처리기가 호출되지 않아 로그 메시지가 표시되지 않습니다. error_get_last()이라면 오류가 기록되고 PHP 오류 로그에서도 볼 수 있지만 오류 처리기를 사용하여 이러한 오류를 모두 잡을 수 있습니다. 내 서버 설정에서 무언가가 올바르게 작동하지 않는 것이 우려됩니다.

는 현재 사용되지 않는 기능/기능을 볼 수 http://www.php.net/manual/en/migration53.deprecated.php

+0

그냥 추측 : 아마도 둘 다 기능이 아니기 때문에 가능하지만 언어 구조이기 때문일 수 있습니다. – KingCrunch

+0

그 차이점을 알았지 만 error_get_last()를 호출하여 오류 정보에 액세스 할 수 있다는 것이 여전히 이상하게 보입니다. 이는 다른 어떤 오류처럼 기록되고 있음을 나타냅니다. 그리고 E_DEPRECATED의 err_num을가집니다. – benr

답변

0

당신은 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) 
----------------------------------- 
관련 문제