BOARD

문제 해결

그누보드4 윈도우 서버 환경 PHP mktime 날짜 오류 해결 방법

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 14회 작성일 26-09-16 16:23

본문

그누보드4 윈도우 서버 환경 PHP mktime 날짜 오류 해결 방법

그누보드4를 윈도우 서버 환경에서 운영할 때 생년월일 입력 등 1970년 이전 날짜 처리 시 발생하는 오류의 원인과 사용자 정의 함수를 통한 해결 절차를 확인합니다.

윈도우 서버 환경 그누보드4 mktime 날짜 오류 원인

윈도우 서버 환경의 APM을 사용하는 그누보드4에서 회원가입 시 생년월일 달력에서 1970년 이전 날짜를 선택하면 경고 메시지가 발생하며 정상적인 날짜 처리가 되지 않는 현상이 발생합니다.

이는 윈도우 서버 환경의 PHP가 mktime 함수를 사용할 때 1970년 이전 날짜를 음수 값으로 처리하지 못하는 제한 사항 때문입니다.

윈도우 서버 환경 PHP mktime 날짜 오류 해결을 위한 코드 수정 방법

윈도우 서버 환경의 APM을 사용하는 그누보드4에서 회원가입 시 생년월일 달력에서 1970년 이전 날짜를 선택하면 윈도우 서버 PHP의 mktime 함수 제한으로 인해 음수 값을 처리하지 못해 경고 메시지가 발생합니다. 이를 해결하려면 bbs/calendar.php 파일에 사용자 정의 함수를 추가하고 기존 코드를 수정해야 합니다.

작업 전 백업

작업을 시작하기 전 반드시 bbs/calendar.php 파일을 백업하십시오.

수정 절차

  1. bbs/calendar.php 파일을 엽니다.
  2. 기존 $mktime = mktime(0,0,0,$mm,1,$yyyy); 코드 상단에 아래의 mk_time 함수를 추가합니다.
function mk_time($m,$d,$y){
    if($y<1970){
        $mk_time=mktime(9,0,0,1,1,1970);
        $i=1969;
        if(checkdate($m,$d,$y)){
            do{
                for($j=12;$j>=1;$j--){
                    if($m==$j && $y==$i){
                        for($k=31;$k>=$d;$k--){
                            if(checkdate($j,$k,$i)) {
                                $time++;
                            }
                        }
                        break;
                    } else {
                        for($z=31;$z>=1;$z--){
                            if(checkdate($j,$z,$i)) {
                                $time++;
                            }
                        }
                    }
                }
                $i--;
            }while($i>=$y);
            return $mk_time-(($time)*24*3600);
        } else {
            return $mk_time;
        }
    } elseif($y>2038){
        $mk_time=mktime(9,0,0,1,1,2038);
        $i=2039;
        if(checkdate($m,$d,$y)){
            do{
                for($j=12;$j>=1;$j--){
                    if($m==$j && $y==$i){
                        for($k=31;$k>=$d;$k--){
                            if(checkdate($j,$k,$i)) {
                                $time++;
                            }
                        }
                        break;
                    } else {
                        for($z=31;$z>=1;$z--){
                            if(checkdate($j,$z,$i)) {
                                $time++;
                            }
                        }
                    }
                }
                $i++;
            }while($i>=$y);
            return $mk_time-(($time)*24*3600);
        } else {
            return $mk_time;
        }
    } else {
        return mktime(0,0,0,$m,$d,$y);
    }
}
  1. 기존 코드를 $mktime = mk_time($mm,1,$yyyy);로 수정합니다.

적용 확인 및 복구 방법

수정 후 회원가입 페이지의 생년월일 달력에서 1970년 이전 날짜를 다시 선택하여 경고 메시지 없이 정상적으로 입력되는지 확인합니다. 문제가 발생할 경우, 미리 백업해둔 bbs/calendar.php 파일을 다시 업로드하여 원상 복구합니다.

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.