강좌

|  다양한 분야에 다소 전문적인 도움이 되는 강좌들입니다.

조회 수 69 추천 수 0 댓글 3
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
Extra Form

안녕하세요?


아미나의 Q&A 게시판에 제가 오늘 답변 댓글을 작성한 것 중에서 회원 이미지와 관련하여 주제가 겹치는 부분이 있어서 


PHP를 공부하는 차원에서 조금 더 보완하고 정리하여 이 게시판에 다시 올립니다.


물론 제 스크립트에 부족한 점이 많지만 스포어 회원님들과 함께 더욱 나은 방법을 궁리해보도록 하겠습니다 :)




1. 회원 이미지 미등록시 여러 종류의 다른 사진을 최대한 랜덤하게 보여주기


이와 관련해서는 우선 한별아빠 님께서 


/lib/apms.lib.php 파일의 apms_photo_url() 함수에서 if(!is_file($photo_file)) return $xp['xp_photo_url']; 부분을


if(!is_file($photo_file)) {
    $photo_url = G5_URL.'/이미지경로/'.substr($mb_id, 0, 1).'.gif';
}


이렇게 수정하면 id의 알파벳 첫 글자에 따라 26개의 이미지를 보여줄 수 있다고 말씀해주셨습니다.



그런데 jake 님의 말씀에 따르면 회원들이 소셜 로그인을 많이 하기 때문에 특정 알파벳의 비율이 지나치게 높다고 하시더군요 ㄷㄷ


예컨대 구글 계정으로 가입하면 google_???????? 이런 식으로 mb_id가 생성되기 때문에 


모두 'g'에 해당하는 이미지가 보여지게 되는 문제점이 있는 것이죠.



그래서 mb_id의 각 글자(알파벳 대소문자 및 숫자, 공백을 제외한 특수문자)를 아스키코드로 변환한 값을 모두 더하여


사용할 예정인 이미지의 개수로 나눈 후 1을 더한 값을 사용하게 되면, 


소셜 로그인을 통해 생성되는 mb_id 값이 모두 다를테니 


완전한 랜덤은 아니더라도 랜덤에 가깝게 특정 이미지에 몰리지 않고 고르게 분포될 것이라고 생각되네요.


이를 PHP 스크립트로 나타내면 다음과 같습니다.


이 글을 빌어 jake 님께 다시 한 번 감사드려요 ^-^


if(!is_file($photo_file)) {  
    $mb_check = preg_replace("/\s+/", "", $mb_id);
    $mb_check = preg_replace("/[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/", '', $mb_check); // id에 한글을 허용하지 않으면 삭제하셔도 무방합니다.
    if(!$mb_check) {
        $mb_check = 'Aa10!';
    }
    $sum = 0;
    $length = strlen($mb_check);
    for ($i=0; $i<$length; ++$i) {
        $sum += (intval(ord(substr($mb_check, $i, 1))));
    }
    $sum = ($sum % 26)+1; // 출력할 이미지가 1.gif부터 26.gif인 경우를 전제로 했습니다.
    $photo_url = G5_URL.'/이미지경로/'.$sum.'.gif';  
}


사실 for문으로 $mb_check 전체를 돌리는 것은 리소스와 시간 낭비인 것 같고


소셜 로그인으로 생성되는 $mb_id의 형식을 볼 때 뒤에서 5자리 정도만 고려하면 충분할 것 같네요.


대략 for ($i = -1; $i >= -5; --$i) 이런 방식으로 하면 될텐데


다만 $length < 5인 경우에 대하여 별도로 고려를 해서 break를 해야 에러가 발생하지 않겠네요.




2.  특정 레벨 이상인 경우에만 회원 이미지를 등록할 수 있도록 하기


가입하자마자 회원 이미지에 광고용 사진을 업로드하는 사람들 때문에 사이트 관리에 애를 먹는 분들이 계시더군요 ㅠㅠ


/bbs/myphoto.php의 7번째 줄 정도에 이 스크립트를 추가하시면 레벨 3 이상인 경우에만 사진을 업로드하도록 할 수 있습니다.


if ($member['mb_level'] <= 2) {
    alert_close(aslang('alert', "레벨업 하신 후에 이용이 가능합니다."));
}


만약 레벨 2 이하의 경우 회원 이미지를 변경하려고 하면 다음과 같은 경고창이 뜨면서 중단됩니다.





이상 여러모로 부족한 제 스크립트를 읽어주셔서 감사합니다.


다 나은 방향이 있다면 말씀해주시면 감사하겠습니다 ^-^


그럼 감기와 보일러 동파 조심하시고 즐겁고 뜻깊은 연말 되세요~!


  • profile
    title: 황금 서버 (30일)humit 2018.12.10 20:16

    1에서 for문과 if문으로 조건을 달기 귀찮으신 분들은 아래와 같이 md5나 sha1과 같은 해싱함수를 사용하셔도 됩니다.

    참고로 이니스프리님께서 올리신 코드도 일종의 해싱함수라고 볼 수 있습니다.

    if(!is_file($photo_file)) {  
        $sum = intval(substr(md5($mb_id), 0, 5));
        $sum = ($sum % 26)+1; // 출력할 이미지가 1.gif부터 26.gif인 경우를 전제로 했습니다.
        $photo_url = G5_URL.'/이미지경로/'.$sum.'.gif';  
    }
  • profile
    이니스프리 2018.12.10 20:23

    허거걱 ㅠㅠ 감사합니다~!!

    제가 너무 아스키코드에 의존하는 경향이 있다보니 해싱함수를 떠올리지 못했네요 ㅜㅜ

    길게 작성한 제 스크립트가 너무 부끄럽군요 (ᗒᗣᗕ)՞ 

    번번이 제게 큰 가르침을 주셔서 정말 감사드려요~!

    그럼 humit 님께서도 감기 조심하시고 즐겁고 뜻깊은 휴가 되세요 ^-^

  • profile
    title: 황금 서버 (30일)humit 2018.12.10 20:33
    네 감사합니다 :)

강좌

다양한 분야에 다소 전문적인 도움이 되는 강좌들입니다.

List of Articles
번호 게시판 제목 글쓴이 날짜 조회 수
공지 sfuh.tk 기본 도메인 사용하는 분들 확인바랍니다. 6 마스터 2019.01.17 117
공지 2019년 새해 복 많이 받으세요! 15 file 마스터 2019.01.01 407
공지 사이트 정보등록을 신경써서 해주시기 바랍니다. 3 마스터 2018.12.31 492
공지 회원 전용 페이지가 생겼습니다. 15 file 마스터 2018.03.20 3925
211 강좌 [아미나] Basic Youtube Title Widget 1.0에서 처음에 엑박으로 뜨는 경우의 해결책 3 file 이니스프리 2018.12.15 78
» 강좌 아미나의 회원 이미지와 관련하여 x2 3 file 이니스프리 2018.12.10 69
209 라이츄 과학츄 21. 혈액형입니츄 12 file title: 네모톰톰 미로치 라미츄허니버터뚠뚜니라이츄 2018.12.08 183
208 강좌 현행 저작권법 제30조(사적이용을 위한 복제)에 대하여 - 음원 다운로더의 처벌과 관련하여 6 이니스프리 2018.12.07 96
207 강좌 그누보드/아미나에서 게시글의 날짜를 최종수정일로 변경하고, 목록스킨 및 위젯을 최종수정일 순으로 정렬하기 2 file 이니스프리 2018.11.11 118
206 강좌 [스페인어 강좌] CH1) 스페인어란? 1 file title: 만렙이 되어보자도토리묵 2018.10.12 109
205 강좌 리뉴얼된 구글 뉴스에서 RSS 피드를 생성하는 방법 3 file 이니스프리 2018.10.07 194
204 라이츄 과학츄 20. 알레르기츄 3 file title: 네모톰톰 미로치 라미츄허니버터뚠뚜니라이츄 2018.10.03 143
203 강좌 아실분들은 아실 미디어위키 웹호스팅상에서의 시각편집기 설치방법(게시판 이동) 3 file 퓨처마츠 2018.10.03 122
202 강좌 [ASP.NET Core를 이용한 웹사이트 만들기] 1. 시작하기 3 file 0x00000FF 2018.09.07 258
201 강좌 [ASP.NET Core를 이용한 웹사이트 만들기] OT. ASP.NET Core란 무엇인가?, 작업 환경 구성 5 0x00000FF 2018.09.06 184
200 라이츄 과학츄 19. 카리킨에 대해 알아보시츄 9 file title: 네모톰톰 미로치 라미츄허니버터뚠뚜니라이츄 2018.08.26 236
199 라이츄 과학츄 18. C3, C4, CAM이츄 3 file title: 네모톰톰 미로치 라미츄허니버터뚠뚜니라이츄 2018.07.22 328
198 라이츄 과학츄 17. 형질전환입니츄-풀때기 3 file title: 네모톰톰 미로치 라미츄허니버터뚠뚜니라이츄 2018.07.03 285
197 Doge의 잡것 프로그래밍 4. 디스코드 봇을 시작해보자 file Doge아시다시피 2018.05.08 2062
196 강좌 정말정말 기본적인 XE 위젯 반응형 적용하기 (라이믹스도 OK!) 7 file 망할윈도우미 2018.04.29 467
195 라이츄 과학츄 16. 형질전환입니츄-박테리아 3 file title: 네모톰톰 미로치 라미츄허니버터뚠뚜니라이츄 2018.04.15 558
194 강좌 DNS가 어떻게 작동하는지 알아봅시다: 2. 각 DNS 레코드의 기능 2 abnoeh 2018.03.30 344
193 강좌 DNS가 어떻게 작동하는지 알아봅시다: 1. DNS 질의 절차 따라가 보기 3 abnoeh 2018.03.27 809
192 라이츄 과학츄 15. bp와 Da츄 file title: 네모톰톰 미로치 라미츄허니버터뚠뚜니라이츄 2018.03.11 608
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 Next
/ 11
서버에 요청 중입니다. 잠시만 기다려 주십시오...