2011-01-14 2 views
3

PHP 5.3.3 (Debian Squeeze)으로 테스트 서버를 업데이트 한 후 PHP에서의 오류보고와 관련하여 이상한 동작이 발생했습니다.E_STRICT 메시지가 설정되지 않았지만 throw되었습니다.

error_reporting(E_ALL); 

30719 메아리

echo error_reporting(); 

를 통해 설정을 확인 :

나는이 같은 error_reporting를 설정합니다. php.net에 따르면 이것은 "레벨 E_STRICT를 제외하고 지원되는 모든 오류 및 경고"를 의미합니다.

그러나 바로 다음 라인 (클래스 정의 abstract class formInputContainer extends formContainer implements formElementValueable { ... })이 메시지에서 결과에

:

엄격한 (2048) : formInputContainer 선언 :: addElement()가 formContainer의 그것과 호환되어야합니다 :: addElement()

E_STRICT 메시지가 설정되지 않았는데도 반향되는 이유는 무엇입니까? 심지어 E_ALL & ~ E_STRICT로 변경해도 도움이되지 않습니다.

+1

이것은 도움이 될 수 있습니다. http://php.net/manual/en/function.error-reporting.php#98414 – eklundchristopher

+0

@Chris : 고마워, 아마도 나는 같은 행동으로 고통 받고있다. 언뜻보기에는이 소리가 나에게 버그처럼 들린다. – acme

+0

당신을 가장 환영합니다! 불편을 끼쳐 드려 죄송 합니다만, 문제를 해결하는 데 도움이되는 정보를 알았 기 때문에 문제에 대한 심층적 인 정보를 드릴 수 없습니다. – eklundchristopher

답변

4

사용자 정의 오류 처리기 인 경우 (set_error_handler()을 통해 설정) 현재 error_reporting 수준을 직접 확인해야합니다.

manual는 말한다 : 사용자 지정 오류 처리기는 모든 오류 메시지를 가져옵니다

이 콜백 함수는 FALSE를 반환하지 않는 한 표준 PHP 오류 처리기가 완전히 error_types가 지정하는 오류 유형에 대한 바이 패스 것을 기억하는 것이 중요하다 . error_reporting() 설정은 아무 효과가 없으며 오류 핸들러는 관계없이 호출됩니다. 그러나 여전히 error_reporting의 현재 값을 읽고 적절한 조치를 취할 수 있습니다.

+0

당신은 완전히 옳습니다 - 이것이 문제입니다, 감사합니다! 이 동작은 PHP 5.3에서 변경되었습니다. 5.2에서 이것은 결코 문제가되지 않았습니다. – acme

+0

이상합니다. Afaik, 그러한 변화는 없었습니다. 그러나 * "선언은 호환 가능해야합니다 ..."* PHP 5.2에서 "치명적인 오류"이며 사용자 정의 오류 처리기로 catch 할 수 없습니다. 희망이 도움이됩니다. –

+0

아, 고맙습니다. – acme

5

설정하지 않아도 표시되는 이유는 컴파일 타임 (예외적으로 구문 분석 시간)에 발생합니다. 즉, error_reporting() 전화가 오기 전에 오류가 발생했음을 의미합니다. 진짜 수정은 정의에서 E_STRICT을 제거하기 위해 php.ini 설정을 변경하는 것입니다. 올바른 파일을 편집하고 있는지 확인하려면 phpinfo()을 확인하십시오.

+0

+1 이상하게도, E_ALL로 스크립트에서'error_reporting'을 사용하면 엄격한 경고가 사라지게됩니다 ... (PHP 5.3.3). – netcoder

+0

@netcoder : 파일에 클래스를로드하기 위해'require'를 호출합니다. 하지만 그 클래스를 가진 파일에 그 호출을 넣으면 아무것도 영향을 미치지 않을 것입니다 ... – ircmaxell

+0

사실 제가 말하고있는 것은 : 클래스와 'error_reporting' 호출은 같은 파일에 있습니다. 내가해야한다고해도 나는 어떤 경고도받지 못하고있다. – netcoder

관련 문제