그누보드5가 현재 php8.2~ 이상 버전 지원을 안하나요?

그누보드5가 현재 php8.2~ 이상 버전 지원을 안하나요?

QA

그누보드5가 현재 php8.2~ 이상 버전 지원을 안하나요?

답변 3

그누보드5(영카트) 버전

5.6.8

사용 PHP 버전

8.2이상

본문

common.lib.php 파일에서

Warning: Undefined array key 에러가 나오는데 php 버전을 낮춰야 하나요?

이 질문에 댓글 쓰기 :

답변 3

그누보드5는 PHP 8.2 이상의 버전에서도 기본적으로 작동합니다.

배열 키 존재 여부를 체크하지 않으면 해당 경고가 발생하는데,

이는 커스텀 코드 작성 시 흔히 발생할 수 있는 팝업입니다.

사용자가 "잘 못 작성했다"기보다는, 과거에는 이런 체크를 생략되더라도 큰 문제가 없었으나,

PHP 8 이상에서는 에러 레벨이 높아지면서 이런 부분이 더 명확하게 드러나게 된 것입니다.

따라서 기존 코드를 최신 PHP 버전에 맞게 업데이트하는 과정에서

isset()나 array_key_exists()와 같은 함수를 사용하여

배열 키 존재 여부를 사전에 확인하는 것이 바람직합니다.

 

 PHP 8.x에서부터는

배열 키가 존재하지 않을 때 발생하는 Undefined array key 경고가 더 엄격하게 처리됨.

 

특히 $_SERVER['HTTP_REFERER']와 같이 항상 존재한다고 보장할 수 없는 배열 접근 시

?? 연산자 또는 isset을 통한 명시적인 검사를 반드시 수행해야 함.

 

*그누5.6.8의 lib/common.lib.php 파일에서 확인된 배열 접근 코드 중에서,

 Undefined array key 경고가 발생할 수 있는 가장 유력한 코드 예시는 아래와 같습니다.

if (!$url3) $url3 = clean_xss_tags($_SERVER['HTTP_REFERER']);

- PHP 8.x 이상에서 $_SERVER['HTTP_REFERER']가 항상 존재하지 않기 때문.

- 외부 링크가 없거나 URL을 직접 입력해 페이지에 접속할 경우

 HTTP_REFERER 값은 존재하지 않으므로, 직접 접근 시 Undefined array key 경고가 발생 함.
> 방안 1: Null 병합 연산자 사용(권장)

$url3 = clean_xss_tags($_SERVER['HTTP_REFERER'] ?? '');

> 방안 2: 명시적 체크
$url3 = '';
if (isset($_SERVER['HTTP_REFERER'])) {
    $url3 = clean_xss_tags($_SERVER['HTTP_REFERER']);
}


*그 외 추가로, 배열 인덱스에 직접 접근하는 다른 부분,

  예를 들어 아래 코드들도 문제 가능성이 있습니다.

- $g5['session_cookie_samesite']

- $config['cf_link_target']

- $row['bf_no'], $row['bf_content'], $row['bf_download'] 등 DB에서 가져오는 값.

이들 경우에도 아래와 같은 안정적인 접근 방식으로 수정하는 것이 좋습니다.

> 예시
$target = $config['cf_link_target'] ?? '_blank';

> DB 값 예시
$content = isset($row['bf_content']) ? html_purifier($row['bf_content']) : '';

 

※ 주의 ※

- 향후 업데이트 시, 변경한 코드가 덮어써지면서 수정 사항이 사라질 수 있음.

- common.lib.php 파일 수정은 원칙적으로 권장되진 않으나,

  PHP 8.2 이상에서 엄격해진 배열 접근 규칙을 준수하도록

  제한적으로 안전하게 수정하는 것은 큰 문제 없음.
- 수정 사항을 명확히 기록(주석 등)하고 관리하시기 바람.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
filter #php ×
전체 15,826
© SIRSOFT
현재 페이지 제일 처음으로