안녕하세요.

현재 제가 사용하고 있는 출석부 모듈에서 원인을 찾지못해 이렇게 글 남깁니다.

@람보 님께도 쪽지를 보냈는데 답변이 없으셔서 다른 분들의 의견을 듣고 싶습니다.

 

현재 제가 운영하고 있는 사이트를 두번 서버 이전했습니다.

처음 서버 이전하기 전까지는 출석부 모듈을 잘 사용하고 있었습니다. (지난번 중복출석건으로 문의 드렸는데 그건 빼구요.)

 

기존에는 XE를 사용중이었습니다.

처음 서버 이전을 했을 때, 이전한 서버에서 서버시간은 KST였지만 PHP 설정은 UTC로 되어있어, 출석부와 시간이 맞지 않아 고민하다,

config/config.inc.php 파일을 열여
  date_default_timezone_set(@date_default_timezone_get());
부분을 아래처럼 바꿔서 사용했습니다.
  date_default_timezone_set('Asia/Seoul');

그 후로는 시간이 맞는지 잘 사용했습니다.

 

문제는 두번째 서버 이전을 하면서, 위의 설정을 그대로 두고 XE에서 Rhymix 로 변경하였습니다.

Rhymix 는 2017년 2월 5일자에서 가장 최신버전으로 다운로드 하고, FTP를 이용해서 덮어쓰기로 설치하였습니다.

물론 Rhymix 로 변경하면서 config/config.inc.php 파일에 손을 대지 않았고, autoupload.php 파일도 건드리지 않았습니다.

이번에 이전한 서버는 서버시간 KST에 php 시간도 Asia/Seoul 로 잘 설정이 되어있습니다.

 

하지만, 실제로 12시 자정이 넘어가고 나면 회원들이 출석체크를 못합니다. 출석 가능시간을 00:00 에서 00:00으로 했음에도 불구하고 대부분의 회원들이 출석을 하지 못합니다.

이게 조금 이상한 부분이 대부분의 회원들은 출첵이 안되고 일부 회원은 또 출첵이 되는 상황입니다.

 

정말 마지막 임시 방편으로 

common/autoupload.php 파일을 열어

 

date_default_timezone_set(@date_default_timezone_get());
부분을

date_default_timezone_set('Asia/Seoul');

 

그리고 더 하단에 

date_default_timezone_set($internal_timezone);
부분도 

date_default_timezone_set('Asia/Seoul');

로 변경하였더니 출첵은 가능하게 되었습니다.

 

하지만 여전히 12시 자정이 되면 출첵이 안되는 현상이 여전히 발생하였고, 급기야 자정을 넘기지 않은 2월 7일 11시 55분 경 이미 출석체크에는 다음날 출석 명단 처럼 새 목록이 표시되었습니다. 그 때 출석부 상단에 표시된 서버 시간은 여전히 2월 7일 11시 55분을 가르키고 있었습니다.

 

어딘가 좀 많이 꼬인것 같은데 특히, 출석부 모듈에서 실제 출석할 때 시간이 잘 맞지 않는것 같습니다. 물론 출석부 모듈에서 시간표시는 맞게 되고 있구요. 현재 아직도 대부분의 회원들은 출석을 하지 못하는 상황입니다.

 

추가적으로 새로 이전한 서버에서 DB 시간은 KST 로 되어있습니다.

 

어떤 식으로 오류가 나느냐 하면,

오늘 9월 자정으로 바뀌자 마자 출석을 하면 출석 되었다고 메세지가 뜨고, (또는 이미 출석되었다고 뜹니다.) 그리고 관리자 화면 "일별" 탭에서 확인을 했을 때, 8일 중복 출석으로 잡히게 됩니다.

이 때 출석부 모듈에서 나타나는 시간은 9일입니다. 실제로 출석되는 시간은 8일이구요.

 

뭐랄까.. 특정회원들만 출석부 모듈에서 체크하는 시간이 다른 것 같습니다.

자정에 출석 안되는 회원들이 낮(정오)쯤 되면 정상적으로 출석이 됩니다.

 

아직도 원인 파악이 안되서 어디를 손봐야할지 모르는 상황입니다.

도움 부탁드립니다. 긴 글 읽어주셔서 감사합니다.

 

 

+추가

관리자 출석 기능을 통해 강제 출석을 하여 9일자 출석분을 확인해보니 출석 시간이 8일 23:59 에 출석처리 되었네요.

 

참고로, 주소는 https://studyforus.com 입니다. 

  • ?

    php.ini에서 timezone을 설정하지 않으면, 시간이 맞지않는 경우가 있습니다.

    원래는 PHP에서 warning 에러를 뿜는데, XE에서는 warning 에러가 출력되지 않도록 셋팅되어 있죠.

     

    date_default_timezone_set(@date_default_timezone_get());

     

    위 코드는 timezone이 설정되지 않았을 때 warning 에러가 나오는 것만 방지하는 코드입니다.

    php.ini에서 timezone을 셋팅해주면, 소스 파일을 일일이 수정하지 않아도 됩니다.

     

    http://ra2kstar.tistory.com/169

  • ? profile
    답변감사합니다.
    서버쪽 php.ini 파일에도 date.timezone = Asia/Seoul 가 세팅되어 있는 상태입니다.
  • profile ?
    https://github.com/bjrambo/attendance/blob/develop/attendance.model.php#L767

    출석 가능한 시간대인지 체크하는 부분이 의심스럽네요. 개발자분에게 문의해보셔야 겠네요.
  • ? profile
    모듈내에서는 세팅이 잘 되어있는데 Simplecode님이 남겨주신 그 부분은 다시 확인해보겠습니다. 감사합니다!