그누보드5가 현재 php8.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 이상에서 엄격해진 배열 접근 규칙을 준수하도록
제한적으로 안전하게 수정하는 것은 큰 문제 없음.
- 수정 사항을 명확히 기록(주석 등)하고 관리하시기 바람.
8.3에서도 잘 작동 합니다.
Undefined array key 이 부분을 찾아서 @를 추가하여 에러를 무시 하도록 하면 될 것입니다.
그누보드 순정에서는 해당 오류가 나오지 않습니다.
해당 라인에 수정된 코드가 있는지 채크하시기 바랍니다.