장기 미접속 회원 일괄 삭제 - 휴면 계정 정리
최근 로그인 기록을 체크해서 장기 미접속 회원들을 일괄적으로 삭제하는 방법입니다.
두 가지 방법으로 살펴보겠습니다.
샘플은 1년으로 설정되어 있습니다. 1년이 아닌 2년 기준으로 하려면 -1 years 여기를 -2 years 이렇게 수정.
월 단위로 설정하려면 -12 months 로 설정.
혹시 모르니 반드시 DB는 백업하고 진행하세요.
처리할 양이 너무 많아서 문제가 생긴다면 한꺼번에 하기보다는 -1 years 기간 설정 부분을 적당히 설정해서 처리량을 줄이고 순차적으로 삭제해보세요.
1. 그누보드 기본 회원 삭제 함수를 사용
회원 정보는 삭제되지만 회원 아이디는 DB에 그대로 남아서 기존 아이디로 재 가입할 수 없습니다.
일반적으로 많이 사용하는 처리 방식입니다. 회원 목록에서도 없어지지 않고 그대로 남습니다.
기본 삭제 함수와 관련된 건 아래 팁을 읽어보시면 자세하게 설명되어 있습니다.
http://gnustudy.com/bbs/board.php?bo_table=gnu_tip&wr_id=231
<?php
include_once('./_common.php');
$login_date = date('Y-m-d H:i:s', strtotime(G5_TIME_YMDHIS . ' -1 years'));
$sql_login = " select mb_id, mb_today_login from {$g5['member_table']} where mb_today_login < '$login_date' order by mb_today_login desc ";
$result = sql_query($sql_login);
for ($i=0; $row=sql_fetch_array($result); $i++) {
echo $row['mb_today_login']." ".$row['mb_id']."<br>";
// 회원 삭제
// member_delete($row['mb_id']);
}
?>
새로 파일을 생성 후 위 코드를 그대로 넣고 그누보드가 설치된 경로에 올린 후 실행하면 삭제 대상 회원 아이디가 출력됩니다.
출력된 회원 목록에서 앞 부분이 최근 로그인 날짜입니다.
설정한 기간의 삭제 대상 회원이 제대로 출력된다면 아래 코드 주석 해제하고 새로 고침하세요.
앞 부분 // 제거하면 됩니다.
// member_delete($row['mb_id']);
2. 회원 아이디까지 완전히 삭제하는 방법
회원 목록에서도 안 보이게 완전히 삭제합니다. 삭제한 아이디로 재 가입도 가능합니다.
방법은 동일합니다. 새로 파일을 생성 후 아래 코드를 그대로 추가하고 실행해서
설정한 기간의 회원 목록이 정상적으로 출력되면 주석 해제하고 새로 고침하면 즉시 삭제됩니다.
여기서의 주석 해제 방법은 위에서 말한 1번 방법과는 차이가 있습니다.
// 이 부분은 건드리지 마시고
/* 여기와
*/ 여기 두 군데만 삭제하세요.
원본 기준으로 그누보드 5.2 이하 버전은 소셜 로그인과 프로필 이미지 관련 코드는 삭제하고 사용하세요.
해당 부분은 5.3 버전부터 추가된 기능입니다.
<?php
include_once('./_common.php');
$login_date = date('Y-m-d H:i:s', strtotime(G5_TIME_YMDHIS . ' -1 years'));
$sql_login = " select mb_id, mb_today_login from {$g5['member_table']} where mb_today_login < '$login_date' order by mb_today_login desc ";
$result = sql_query($sql_login);
for ($i=0; $row=sql_fetch_array($result); $i++) {
echo $row['mb_today_login']." ".$row['mb_id']."<br>";
/*
// 회원 삭제
sql_query(" delete from {$g5['member_table']} where mb_id = '{$row['mb_id']}' ");
// 포인트 테이블에서 삭제
sql_query(" delete from {$g5['point_table']} where mb_id = '{$row['mb_id']}' ");
// 그룹접근가능 삭제
sql_query(" delete from {$g5['group_member_table']} where mb_id = '{$row['mb_id']}' ");
// 쪽지 삭제
sql_query(" delete from {$g5['memo_table']} where me_recv_mb_id = '{$row['mb_id']}' or me_send_mb_id = '{$row['mb_id']}' ");
// 스크랩 삭제
sql_query(" delete from {$g5['scrap_table']} where mb_id = '{$row['mb_id']}' ");
// 관리권한 삭제
sql_query(" delete from {$g5['auth_table']} where mb_id = '{$row['mb_id']}' ");
// 그룹관리자인 경우 그룹관리자를 공백으로
sql_query(" update {$g5['group_table']} set gr_admin = '' where gr_admin = '{$row['mb_id']}' ");
// 게시판관리자인 경우 게시판관리자를 공백으로
sql_query(" update {$g5['board_table']} set bo_admin = '' where bo_admin = '{$row['mb_id']}' ");
//소셜로그인에서 삭제 또는 해제
if(function_exists('social_member_link_delete')){
social_member_link_delete($row['mb_id']);
}
// 아이콘 삭제
@unlink(G5_DATA_PATH.'/member/'.substr($row['mb_id'],0,2).'/'.$row['mb_id'].'.gif');
// 프로필 이미지 삭제
@unlink(G5_DATA_PATH.'/member_image/'.substr($row['mb_id'],0,2).'/'.$row['mb_id'].'.gif');
*/
}
?>
## 참고 사항 ##
회원 아이디까지 완전히 삭제하는 또 다른 방법은..
아래 팁을 우선 적용 후
http://gnustudy.com/bbs/board.php?bo_table=gnu_tip&wr_id=104
2번이 아닌 1번 방법으로 해도 완전 삭제가 가능합니다.
팁 내용에 있는 lib/common.lib.php 파일의 회원 삭제 함수를 보면 2번에 있는 코드 내용들과 대부분 동일합니다.