J

그누보드 아이콘 gif말고 다른 이미지 포멧도 추가하기

있는지 모르겠는데 그누보드 처음써보면서 코드가 직관적이라 참 편하다 느낍니다.

개인적으로는 자바랑 씨샵때문에 어느샌가 php도 객체지향으로 떡칠해갔었는데.. 

아무튼  커뮤니티 하나 만들려고 보니 귀차니즘이 도래해서 XE랑 워드프레스는 써봤지만 그누보드 안써봐서 (고친적은 몇번있습니다만) 해보니 단순해서 좋네요.

 

레벨올리기 위해서 글 올려봅니다. (중복이라면 죄송합니다.)

그누보드 5 최신판입니다.

 

수정해야할 파일 목록

 

/bbs/register_form.php

/bbs/register_form_update.php

/skin/basic/member/register_form.skin.php

두곳을 수정해야됩니다.

 

코드 먼저 써드리고 후일담 나눌께요.

보기보단 간단합니다.

 

/bbs/register_form.php 

 

------------ Line 112 ----------

// 회원아이콘 경로 

$mb_icon_path = G5_DATA_PATH.'/member/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].$ext;

 

$mb_icon_url  = G5_DATA_URL.'/member/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].$ext;

 

============아래처럼 바꿔줍니다 ===========>

 

// 회원아이콘 경로

if(file_exists(G5_DATA_PATH.'/member/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].'.gif'))

    $ext = '.gif';

else if(file_exists(G5_DATA_PATH.'/member/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].'.jpg'))

    $ext = '.jpg';

else if(file_exists(G5_DATA_PATH.'/member/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].'.png'))

    $ext = '.png';

$mb_icon_path = G5_DATA_PATH.'/member/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].$ext;

 

$mb_icon_url  = G5_DATA_URL.'/member/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].$ext;

 

 

/* 그누보드의 프로필 사진이 DB 기반이 아니라 멤버 아이디에서 가져오는 파일명 기반이라 다음과 같이 처리했습니다. 다르게 쓰셔도 되는데 예전부터 떠돌던 소문에 if else if 가 php에서 가장빠르다고 해서 파일 유무 체크 함수가 가벼운축에 속하지도 않아서 if else 로 썼습니다. 깔끔하려면  case를 써도 괜찮겠네요 */

 

 

/bbs/register_form_update.php 

Line 352

// 아이콘 삭제

if (isset($_POST['del_mb_icon'])) {

    @unlink($mb_dir.'/'.$mb_id.'.gif');

 

}

 

============아래처럼 바꿔줍니다 ===========> 

 

// 아이콘 삭제

if (isset($_POST['del_mb_icon'])) {

    @unlink($mb_dir.'/'.$mb_id.'.gif');

    @unlink($mb_dir.'/'.$mb_id.'.jpg');

    @unlink($mb_dir.'/'.$mb_id.'.png');

}



Line 359 
(위에꺼 넣으셧으면 361번 줄이 됩니다. 이건 제가 수정을 많이 해서 원래 꺼를 모르겠네요... '//인증메일 발송' 전 부분까지 교체해주시면 됩니다. 원래 코드랑 비교를 하셔도 되겠네요.)

// 아이콘 업로드

$mb_icon = '';

if (isset($_FILES['mb_icon']) && is_uploaded_file($_FILES['mb_icon']['tmp_name'])) {

    @unlink($mb_dir.'/'.$mb_id.'.gif');

    @unlink($mb_dir.'/'.$mb_id.'.jpg');

    @unlink($mb_dir.'/'.$mb_id.'.png');

     $path = pathinfo($_FILES['mb_icon']['name']);     

     $ext = strtolower($path['extension']); 

    if ($ext == 'gif' ||  $ext == 'jpg' ||  $ext == 'png') {

        // 아이콘 용량이 설정값보다 이하만 업로드 가능

        if ($_FILES['mb_icon']['size'] <= $config['cf_member_icon_size']) {

            @mkdir($mb_dir, G5_DIR_PERMISSION);

            @chmod($mb_dir, G5_DIR_PERMISSION);    

            $dest_path = $mb_dir.'/'.$mb_id.'.'.$ext;

            move_uploaded_file($_FILES['mb_icon']['tmp_name'], $dest_path);

            chmod($dest_path, G5_FILE_PERMISSION);

            

            if (file_exists($dest_path)) {

                //=================================================================\

                // 090714

                // gif 파일에 악성코드를 심어 업로드 하는 경우를 방지

                // 에러메세지는 출력하지 않는다.

                //-----------------------------------------------------------------

                $size = getimagesize($dest_path);

                if ($size[2] != 1 && $size[2] != 2 && $size[2] != 3) // gif 파일이 아니면 올라간 이미지를 삭제한다.

                    @unlink($dest_path);

                else

                // 아이콘의 폭 또는 높이가 설정값 보다 크다면 이미 업로드 된 아이콘 삭제

                if ($size[0] > $config['cf_member_icon_width'] || $size[1] > $config['cf_member_icon_height'])

                    @unlink($dest_path);

                //=================================================================\

            }

        } else {

            $msg .= '회원아이콘을 '.number_format($config['cf_member_icon_size']).'바이트 이하로 업로드 해주십시오.';

        }

 

    } else {

        $msg .= $_FILES['mb_icon']['name'].'은(는) 이미지 파일이 아닙니다.';

    }

}

 

 

/skin/basic/member/register_form.skin.php 

Line 409

  if (!f.mb_icon.value.toLowerCase().match(/.(gif)$/i)) {

=============>

  if (!f.mb_icon.value.toLowerCase().match(/.(gif|png|jpg)$/i)) { 

 

후일담...

직관적이라 너무 좋네요 php단에서 막는데 궂이 자바스크립트 단에서도 막아야 됐나 하는 생각도 살짝 들었습니다만 뭐 폼넘기기전에 체크하면 부하가 1이라도 없으니 좋은거고 자바스크리브로만 막으면 또 쉽게 뚫어버리긴하죠

개인적으로 이쪽 함수가 좀 더 탄탄했으면 하는 생각도 듭니다. getimagesize함수로만 체크가 되면 이미지에 악성코드 섞는 공격에는 조금 취약할 수 있지 않나.. 하는데 제가 아직 그누보드 코드를 다 열어본건 아니라 감히 말하기가 그렇네요 (이미 다말해놓고...?)

 

필요하신분 도움되셨으면 합니다~~

 

 

|

댓글 1개

기존 그누보드 소스에 추가되어도 좋을듯 싶은데요..! ^^
댓글을 작성하시려면 로그인이 필요합니다. 로그인

프로그램

태그 필터 (최대 3개) 전체 개발자 소스 기타 mysql 팁자료실 javascript php linux flash 정규표현식 jquery node.js mobile 웹서버 os 프로그램 강좌 썸네일 이미지관련 도로명주소 그누보드5 기획자 견적서 계약서 기획서 마케팅 제안서 seo 통계 서식 통계자료 퍼블리셔 html css 반응형 웹접근성 퍼블리싱 표준화 반응형웹 홈페이지기초 부트스트랩 angularjs 포럼 스크린리더 센스리더 개발자톡 개발자팁 퍼블리셔톡 퍼블리셔팁 기획자톡 기획자팁 프로그램강좌 퍼블리싱강좌
+
제목 글쓴이 날짜 조회
9년 전 조회 155
9년 전 조회 121
9년 전 조회 515
9년 전 조회 136
9년 전 조회 280
9년 전 조회 146
9년 전 조회 167
9년 전 조회 126
9년 전 조회 115
9년 전 조회 177
9년 전 조회 110
9년 전 조회 123
9년 전 조회 141
9년 전 조회 292
9년 전 조회 99
9년 전 조회 324
9년 전 조회 164
9년 전 조회 123
9년 전 조회 685
9년 전 조회 483
9년 전 조회 286
9년 전 조회 301
9년 전 조회 339
9년 전 조회 218
9년 전 조회 221
9년 전 조회 329
9년 전 조회 172
9년 전 조회 174
9년 전 조회 286
9년 전 조회 256
9년 전 조회 308
9년 전 조회 326
9년 전 조회 246
9년 전 조회 190
9년 전 조회 313
9년 전 조회 325
9년 전 조회 352
9년 전 조회 368
9년 전 조회 580
9년 전 조회 502
9년 전 조회 342
9년 전 조회 473
9년 전 조회 357
9년 전 조회 335
9년 전 조회 657
9년 전 조회 275
9년 전 조회 432
9년 전 조회 427
9년 전 조회 482
9년 전 조회 327
9년 전 조회 149
9년 전 조회 369
9년 전 조회 417
9년 전 조회 339
9년 전 조회 305
9년 전 조회 153
9년 전 조회 411
9년 전 조회 363
9년 전 조회 904
9년 전 조회 227
9년 전 조회 375
9년 전 조회 351
9년 전 조회 727
9년 전 조회 760
9년 전 조회 484
9년 전 조회 415
9년 전 조회 437
9년 전 조회 792
9년 전 조회 443
9년 전 조회 625
9년 전 조회 490
9년 전 조회 556
9년 전 조회 481
9년 전 조회 739
9년 전 조회 465
9년 전 조회 453
9년 전 조회 385
9년 전 조회 494
9년 전 조회 427
9년 전 조회 504
9년 전 조회 584
9년 전 조회 366
9년 전 조회 437
9년 전 조회 429
9년 전 조회 571
9년 전 조회 389
9년 전 조회 512
9년 전 조회 366
9년 전 조회 409
9년 전 조회 325
9년 전 조회 505
9년 전 조회 396
9년 전 조회 402
9년 전 조회 444
9년 전 조회 400
9년 전 조회 399
9년 전 조회 349
9년 전 조회 743
9년 전 조회 807
9년 전 조회 774
🐛 버그신고