강좌

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

조회 수 114 추천 수 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
번호 게시판 제목 글쓴이 날짜 조회 수
공지 구글 로그인 문제가 있던 부분을 해결하였습니다. 7 마스터 2019.03.13 177
공지 당분간 호스팅 신청을 받지 않습니다. 20 마스터 2019.02.27 647
공지 회원 전용 페이지가 생겼습니다. 15 file 마스터 2018.03.20 5767
214 강좌 웹디자인 第一강 홈페이지는 어떻게 만드는건가 new PRASEOD- 2019.03.19 5
213 강좌 간단한 JS강의 #1 2 도토리묵 2019.03.02 66
212 라이츄 과학츄 22. 혈액입니츄 1 file title: 하트뿅뿅 피카츄허니버터뚠뚜니라이츄 2019.02.05 133
211 강좌 [아미나] Basic Youtube Title Widget 1.0에서 처음에 엑박으로 뜨는 경우의 해결책 3 file 이니스프리 2018.12.15 155
» 강좌 아미나의 회원 이미지와 관련하여 x2 3 file 이니스프리 2018.12.10 114
209 라이츄 과학츄 21. 혈액형입니츄 12 file title: 하트뿅뿅 피카츄허니버터뚠뚜니라이츄 2018.12.08 319
208 강좌 현행 저작권법 제30조(사적이용을 위한 복제)에 대하여 - 음원 다운로더의 처벌과 관련하여 6 이니스프리 2018.12.07 204
207 강좌 그누보드/아미나에서 게시글의 날짜를 최종수정일로 변경하고, 목록스킨 및 위젯을 최종수정일 순으로 정렬하기 2 file 이니스프리 2018.11.11 1809
206 강좌 [스페인어 강좌] CH1) 스페인어란? 1 file 도토리묵 2018.10.12 152
205 강좌 리뉴얼된 구글 뉴스에서 RSS 피드를 생성하는 방법 3 file 이니스프리 2018.10.07 387
204 라이츄 과학츄 20. 알레르기츄 3 file title: 하트뿅뿅 피카츄허니버터뚠뚜니라이츄 2018.10.03 228
203 강좌 아실분들은 아실 미디어위키 웹호스팅상에서의 시각편집기 설치방법(게시판 이동) 3 file 퓨처마츠 2018.10.03 182
202 강좌 [ASP.NET Core를 이용한 웹사이트 만들기] 1. 시작하기 3 file 0x00000FF 2018.09.07 375
201 강좌 [ASP.NET Core를 이용한 웹사이트 만들기] OT. ASP.NET Core란 무엇인가?, 작업 환경 구성 5 0x00000FF 2018.09.06 328
200 라이츄 과학츄 19. 카리킨에 대해 알아보시츄 9 file title: 하트뿅뿅 피카츄허니버터뚠뚜니라이츄 2018.08.26 317
199 라이츄 과학츄 18. C3, C4, CAM이츄 3 file title: 하트뿅뿅 피카츄허니버터뚠뚜니라이츄 2018.07.22 378
198 라이츄 과학츄 17. 형질전환입니츄-풀때기 3 file title: 하트뿅뿅 피카츄허니버터뚠뚜니라이츄 2018.07.03 318
197 Doge의 잡것 프로그래밍 4. 디스코드 봇을 시작해보자 file Doge아시다시피 2018.05.08 2278
196 강좌 정말정말 기본적인 XE 위젯 반응형 적용하기 (라이믹스도 OK!) 7 file 망할윈도우미 2018.04.29 542
195 라이츄 과학츄 16. 형질전환입니츄-박테리아 3 file title: 하트뿅뿅 피카츄허니버터뚠뚜니라이츄 2018.04.15 608
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 Next
/ 11
서버에 요청 중입니다. 잠시만 기다려 주십시오...