php, 아파치 로그 [error] [client xxx.xxx.xxx.xxx] PHP Notice:  Use of undefined index 에러가 쌓일 때.



tail -f error_log 해보면 


[Wed Apr 29 20:30:12 2015] [error] [client 123.123.123.123] PHP Notice:  Undefined index page in /~~~~ 과 같은 로그가 계속 쌓이는 것을 볼 수 있다.


그런데 해당 페이지는 전혀 문제가 없다. 로그만 쌓일 뿐이다.


괜히 로그 파일만 쌓이니 해결해 주자.




원인 : 보통 php변수를 선언할 때엔 변수 선언과 동시에 값을 대입하는데 GET, POST 변수인 경우엔 변수 선언시 아직 값이 할당되지 않은 경우가 있다.


즉, 


1.  $page = $_GET['page'];

2.  if(!$page){

3.     $page = 1;

4.  }


위와 같이 선언한 경우에는 2페이지로 넘어가기 전 1페이지만 호출시 $_GET['page'] 값이 없게 된다. 

그래서 1번줄에 에러가 나는 것이다.


물론 프로그램 동작시에는 문제가 없지만 php설정에 따라 로그를 남기게 된다.


null 값으로 변수를 선언했다는 이유임.



해결방법1) : 변수선언시 isset 으로 확인 (권장방법)


php.net 에서 권고하는 방법은, 변수선언을 다음과 같이 해준다.


1번 행을, 아래와 같이 선언해준다.


1.  $page = (isset($_GET['page']) ? $_GET['page'] : null);



다음과 같이 해도 됨.
$page = (isset($page) ? $page : null);



해결방법2) : php.ini 수정 (권장하진 않지만 동일한 효과)


서버를 손볼 수 있다면 php.ini 파일을 열어 수정해 준다.


php.ini 파일을 열고 아래와 같은 부분을 찾는다.


;error_reporting = E_ALL & ~E_NOTICE

;

;   - Show all errors, except for notices

;

;error_reporting = E_ALL & ~E_NOTICE | E_STRICT

;

;   - Show only errors

;

;error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR

;

;   - Show all errors, except coding standards warnings

;

error_reporting  =  E_ALL



이 부분을 아래와 같이 주석을 바꿔준다.




error_reporting = E_ALL & ~E_NOTICE

;

;   - Show all errors, except for notices

;

;error_reporting = E_ALL & ~E_NOTICE | E_STRICT

;

;   - Show only errors

;

;error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR

;

;   - Show all errors, except coding standards warnings

;

;error_reporting  =  E_ALL



저장하고 아파치를 재시작하면 된다.


끝.




블로그 이미지

엘로드넷

Tag ,

댓글을 달아 주세요