채택완료

run 함수 질문입니다

Copy
function run()
    {
        global $config, $g5, $member;

        // 현재접속자 처리
        $tmp_sql = " select count(*) as cnt from {$g5['login_table']} where lo_ip = '{$_SERVER['REMOTE_ADDR']}' ";
        $tmp_row = sql_fetch($tmp_sql);

        if ($tmp_row['cnt']) {
            $tmp_sql = " update {$g5['login_table']} set mb_id = '{$member['mb_id']}', lo_datetime = '".G5_TIME_YMDHIS."', lo_location = '{$g5['lo_location']}', lo_url = '{$g5['lo_url']}' where lo_ip = '{$_SERVER['REMOTE_ADDR']}' ";
            sql_query($tmp_sql, FALSE);
        } else {
            $tmp_sql = " insert into {$g5['login_table']} ( lo_ip, mb_id, lo_datetime, lo_location, lo_url ) values ( '{$_SERVER['REMOTE_ADDR']}', '{$member['mb_id']}', '".G5_TIME_YMDHIS."', '{$g5['lo_location']}',  '{$g5['lo_url']}' ) ";
            sql_query($tmp_sql, FALSE);

            // 시간이 지난 접속은 삭제한다
            sql_query(" delete from {$g5['login_table']} where lo_datetime < '".date("Y-m-d H:i:s", G5_SERVER_TIME - (60 * $config['cf_login_minutes']))."' ");

            // 부담(overhead)이 있다면 테이블 최적화
            //$row = sql_fetch(" SHOW TABLE STATUS FROM `$mysql_db` LIKE '$g5['login_table']' ");
            //if ($row['Data_free'] > 0) sql_query(" OPTIMIZE TABLE $g5['login_table'] ");
        }

 

 

위에 함수가 run 함수중 일부인데요.

아래 코드가 if else 문 안에 있으며 안되고 아예 밖으로 나와야 하는것 아닌가요?

if문 안에 있게 되면 제가 관리자 페이지에서 설정해 놓은

cf_login_minute 가 아예 실행되지 않는것 같은데..

 

그래서 if else 문 다음에 아래 코드를 넣었더니

제대로 작동하는것 같습니다.

저 코드가 if else 문 안에 있어야 할 이유가 있나요?

혹시 DB부담이 많이 될까요?

제가 cf_login_minute를 1분으로 해 놓았는데..

1분마다 삭제해야 하니;;

 

아래 코드가

1분이상 아무 활동없는 접속자를 삭제하는 건가요?

Copy
// 시간이 지난 접속은 삭제한다

sql_query(" delete from {$g5['login_table']} where lo_datetime < '".date("Y-m-d H:i:s", G5_SERVER_TIME - (60 * $config['cf_login_minutes']))."' ");

답변 2개 / 댓글 3개

채택된 답변
+20 포인트

말씀하신 대로 cf_login_minute 에 설정된 시간동안 아무것도 하지 않는 경우에 삭제를 하는거죠.

님처럼 if 문 바깥에 놓으면 접속하고 활동하다가도 1분이 지나면 삭제하니 다시 로그인을 해야 됩니다.

답변에 대한 댓글 2개

if 문 밖에 두면 로그인이 풀리지는 않구요
그냥 login 테이블에서 삭제되는것 같은데요...
맞나요?
테스트를 해봐야 정확하겠지만
코드만 봐서는 현재 로그인 테이블에 없을때만 동작하도록 하는게 정확한거 같은데 ...

일단 주석 달아두고 if 문 밖으로 빼셔도 될거 같습니다.
그 쿼리로 부담되는거야 그위에 insert, update 가 있으니 대동소이한것으로 보입니다.

아래코드가 if문안에 굳이 있어야할 코드는 아닌거같습니다. 밖에 놔두었다면 global 밑에 놔두시면 정상적으로 작동하는 코드가 맞습니다. 그리고 쿼리문 1줄로 db에 부담이 가지는 않을꺼같네요

답변에 대한 댓글 1개

근데 왜 이게..
if else 문 안에 있었을까요;

답변을 작성하려면 로그인이 필요합니다.