PHP 매뉴얼
이전 | C. 부록. PHP 3 에서 PHP 4로 이주 | 다음

# 에러 보고

## 변경된 설정

PHP 3에서 에러 보고 레벨은 단순하게 숫자값으로 설정되었다. 이런 숫자값은 다른 에러 레벨과 관련된 숫자를 합쳐서 구성된다. 이용가능한 값중에 15는 모든 에러를 보고하고 7은 나쁜 스타일에 대한것과 이와 비슷한 것들을 보고하는 단순한 경고메시지를 제외한 모든 것을 보고하는데 사용된다.

PHP 4는 에러/경고 레벨을 다량 보유하고 있고 이는 의도된 동작을 위한 설정에 사용되는 심볼릭 상수를 허용하는 설정 해석기로 인해 추가되었다.

현재의 에러 보고 레벨은 심볼릭 상수 `E_ALL`에서 원하지 않는 경고 레벨값을 x-or 연산을 수행하여 에러 메시지를 생성시키고 싶지 않은 경고 레벨을 명시적으로 제거하도록 설정해야 한다. 복잡해 보이는가? 자, 에러 보고시스템에게 심볼릭 상수 `E_NOTICE`로 분류되어있는 단순한 스타일 경고를 제외한 모든것을 보고하도록 해보자. `php.ini`에 다음 설정을 넣어야 할것이다: `error_reporting = E_ALL & ~ ( E_NOTICE )`. 이진수를 사용하거나 연산자 '|'를 사용하여 괄호 안에 적절한 상수를 추가함으로써 다른 경고도 감출수 있다: `error_reporting= E_ALL & ~ ( E_NOTICE | E_WARNING)`.

주의
PHP 3에서 PHP 4로 코드나 서버를 업그레이드할때 이 설정을 체크해야 하고 error_reporting()를 호출하거나 새로운 에러 타입인 E_COMPILE_ERROR로 에러 보고를 비활성화시킬수 있다. 이 기능은 무슨일이 일어났고 문제가 발생한 장소가 어디인지에 대한 피드백 없이 비어있는 문서를 보여줄것이다.

주의

에러 보고를 설정하기 위해 구버전의 7과 15 값을 사용하는 것은 좋은 생각이 아니다. 왜냐하면 이 값들은 해석 에러를 포함한 새로 추가된 에러의 일부도 보이지 않게 하기 때문이다. 이 값들은 매우 이상한 동작으로 유도할수 있는데 스크립트가 모든 장소에서 에러 메시지를 보이며 작동할것이다.

과거에 잘못 설정된 에러 보고 시스템 때문에 require된 파일 안에 '}' 같은 것을 빠뜨렸을 경우를 `TRUE`로 보고 해석기가 보고하지 않아서 추적할수 없었던 스크립트 엔진의 문제점이 보고되었는데, 이것은 이런 버그 레포트가 더이상 생기지 않도록 해주었다.

그래서 에러 보고 설정을 체크하는것은 스크립트를 조용하게 die시킬때 우선적으로 해야할 일이다. 젠드 엔진은 현재 이런 종류의 이상한 동작을 발생시키지 않을만큼 충분히 성숙돼 있다고 판단된다.

## 추가된 경고 메시지

기존의 많은 PHP 3 코드는 좋지 않은 스타일의 언어 구조를 사용하였다. 이 코드는 다른 장소의 코드 변화에 의해 쉽게 파괴될수 있다. PHP 4는 그런 상황에서 PHP 3에서 하지않았던 많은 경고 메시지를 출력할것이다. 이런 경고메시지를 고치려면 단지 E_NOTICE 메시지를 꺼놓아도 되지만, 대신 그 코드를 고치는것이 더 좋은 생각이다.

현재 경고메시지를 발생할수 있는 가장 일반적인 경우가 따옴표로 둘러싸지않고 문자열 상수를 배열의 인덱스로 사용하는 것이다. PHP 3와 PHP 4 모두 이것이 그 이름으로 선언된 상수나 키워드가 아니면 문자열로 해석하게 될것이다. 그러나 그 코드이외의 곳에서 그 이름을 갖는 상수가 선언되기만 하면 그 스크립트를 제대로 작동할수 없게 할수 있다. 그 스크립트에서 침입자에게 주어서는 안될 권한을 줄수 있게 하는 방법으로 침입자가 문자열 상수를 재선언할수만 있다면 보안적인 위험이 될수도 있다. 그래서 PHP 4는 현재 따옴표로 둘러싸지 않은 문자열 상수를 사용할때마다 경고를 하게 될것이다. `$_SERVER[REQUEST_METHOD]`와 같은 예를 들수 있다. 이것을 `$_SERVER['REQUEST_METHOD']`으로 변경하면 해석기도 편해지고 스타일과 보안을 크게 향상시킬것이다.

PHP 4가 경고 할 수 있는 다른 것이 초기화되지 않은 변수나 배열 구성요소의 사용이다.

이전 | 처음으로 | 다음
해석기(Parser) 동작 | 위로 | 초기화