행주기씨대종중

홈페이지 운영자료

PHP에서 Undefined index, variable, constant 오류 표시하지 않도록 처리

페이지 정보

profile_image
작성자 ROOT
댓글 0건 조회 2,541회 작성일 23-05-01 09:22

본문

php 5.6 버전 이상부터는 미리 선언하지 않은 변수를 사용하는 경우 Undefined index: 에러가 나온다.
예를 들면 $id = $_GET["id"]; 에서 id 에 맞는 값이 없으면 에러가 나타난다.

1.
[php설치경로] 의 php.ini 파일을 수정해서 해결.

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
으로 되있는 것을
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE
으로 & ~E_NOTICE를 추가한다.

2.
문제된 php 파일 상단에 error_reporting 함수를 사용, 이것을 적용한 파일에서만 적용된다.

error_reporting(E_ALL ^ E_NOTICE);

[참고]
앞에 물결 표시(~)를 붙이면 PHP 파일에서 @를 붙여 출력하지 않도록 하는 뜻이다.
곧 E_ALL 은 모든 에러 메시지 표시한다는 뜻이고, ~E_ALL은 모든 에러 메시지를 표시하지 않는다는 것이다.
~E_NOTICE를 붙이면 변수 문제에 의한 오류를 출력하지 않으므로, Undefined index: 오류가 페이지에 출력되지 않는다.

E_ALL 은 모든 에러 메시지
E_COMPILE_ERROR : 젠드엔진의 심각한 컴파일오류
E_COMPILE_WARNING : 젠드엔진의 심각하지 않은 컴파일오류
E_CORE_ERROR : 젠드엔진의 심각한 오류
E_CORE_WARNING : 젠드엔진의 심각하지 않은 오류
E_DEPRECATED : 향후 버전에 지원되지 않는 경우(deprecated된 경우)
E_ERROR : 치명적인 실행오류
E_NOTICE : 일반적인 코드, 변수 문제에 의한 오류
E_PARSE : 컴파일 시의 구문오류
E_RECOVERABLE_ERROR : 더욱 치명적인 실행오류
E_STRICT : 스크립트 컴파일 시 오류
E_USER_DEPRECATED : 사용자가 만든 배제된 경고
E_USER_ERROR : 사용자가 만든 오류 메시지
E_USER_NOTICE : 사용자가 만든 통보 메시지
E_USER_WARNING : 사용자가 만든 경고 메시지
​E_WARNING : 심각하지 않은 실행오류

[출처] [php] Undefined index: 오류 표시하지 않도록 처리|작성자 착한흑곰

3.
오류나는 파일에서 근본처리방법

PhP7에서 Undefined index 에러는 배열이나 객체에서 없는 값을 사용하려고 할 때 나타난다. 이 오류를 처리하기 위해서는 다음과 같은 방법이 있다.

ㄱ. isset() 함수 사용하기:
Undefined index 에러를 막기 위해서는 먼저 해당 값이 있는지 확인해야 하기 때문에 isset() 함수를 사용한다. 이 함수는 변수값이 있는지 없는지를 불리언 값으로 나타낸다.

예를 들어 id변수에 대하여

if (isset($_POST['id'])) {
  // id가 있어야만 실행됨
  $id = $_POST['id'];
}
* 변수들 : 하나의 변수만이 아니라 콤마(,)로 여러개의 변수를 검사할 수도 있다.

ㄴ. 배열 초기화하기:
Undefined index 에러를 막기 위해서는 미리 배열을 초기화해둔다. 이를 위해서는 빈 배열을 만들고, 이후에 해당 키를 더하는 방법을 사용한다.

$data = array();
$data['id'] = $_POST['id'];

ㄷ. Null 병합 연산자 사용하기:
Null 병합 연산자는 PHP 7에서 추가된 연산자로, 변수가 null일 경우에만 대체 값을 반환합니다. 이를 사용하면 Undefined index 오류를 방지할 수 있습니다.

$id = $_POST['id'] ?? null;

댓글목록

등록된 댓글이 없습니다.


Copyright © KISTORY.NET 2001 - 2024 기회근 개인 홈페이지 All rights reserved.
모바일버전