2014-11-16 1 views
0

정의되지 않은 변수를 사용할 때 단일 오류가 나타나기를 원하지만 다른 E_NOTICE 오류가 발생하지 않도록하는 것이 좋습니다.E_NOTICE : 정의되지 않은 변수 만보고하십시오.

+1

원하지 않는 메시지를 걸러내는 [custom error handler] (http://php.net/manual/en/function.set-error-handler.php)가있을 것입니다. 그러나 다른 고지 사항은 고치거나 수정할 수있는 것이 아닙니다. –

+0

다른 공지 사항을 숨기면 안됩니다. –

+0

사실 E_NOTICE 오류가 발생하면 스크립트 실행에 몇 년이 걸리므로 2 분을 기다렸다가 중지했습니다 (대개 10 초 ...). PHP는 너무 많은 E_NOTICE 오류가 있기 때문에 PHP가 끝나지 않기 때문에 수천 개의 오류가 발생합니다. 내 대본은 거대하다. – sylvain1264

답변

2

공식적으로 경고 또는 통지를 생성하지 않는 PHP 코드를 작성하는 것이 좋습니다. 실제로 모든 고지와 경고를 제거하는 것이 목표가되어야합니다.

그러나 오류가 발생했을 때 실행할 콜백 기능을 허용하는 set_error_handler()을 통해 PHP의 사용자 정의 오류 처리를 사용하여 달성 할 수있는 질문은 무엇입니까?

오류 문자열 $errstr 콜백 매개 변수에서 undefined indexundefined variable에 대한 문자열 일치를 수행하는 함수를 정의 할 수 있습니다. 그런 다음 PHP의 정상적인 오류보고 시스템을 무시하고 자신의 것으로 대체합니다. 나는 이것이 훌륭한 해결책이라고 생각하지 않는다는 것을 반복 할 것이다.

$error_handler = function($errno, $errstr, $errfile, $errline) { 
    if (in_array($errno, array(E_NOTICE, E_USER_NOTICE))) { 
    // Match substrings "undefined index" or "undefined variable" 
    // case-insensitively. This is *not* internationalized. 
    if (stripos($errstr, 'undefined index') !== false || stripos($errstr, 'undefined variable') !== false) { 
     // Your targeted error - print it how you prefer 
     echo "In file $errfile, Line $errline: $errstr"; 
    } 
    } 
}; 

// Set the callback as your error handler 
// Apply it only to E_NOTICE using the second parameter $error_types 
// so that PHP handles other errors in its normal way. 
set_error_handler($error_handler, E_NOTICE); 

참고 : 위의 내용은 영어 이외의 다른 언어에도 자동으로 적용되지 않습니다. 그러나 자신의 목적이나 제한된 사용만을위한 것이라면 문제가 아닐 수 있습니다.

+0

PHP 5.2.17을 사용하면이 코드가 컴파일되지 않습니다. 나는이 방법으로 함수를 사용할 수 없다고 생각한다. 첫 줄에이 오류가 있습니다 : "구문 분석 오류 : 구문 오류, 예기치 않은 T_FUNCTION, 예상 ')." – sylvain1264

+0

Nevermind, 당신은 실수로 이것을 아주 빨리 썼습니다. ^^이 문제를 해결할 수 있습니다. 유용한 도움을 주셔서 감사합니다. – sylvain1264