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년 전 조회 178
9년 전 조회 129
9년 전 조회 533
9년 전 조회 155
9년 전 조회 297
9년 전 조회 168
9년 전 조회 184
9년 전 조회 146
9년 전 조회 138
9년 전 조회 198
9년 전 조회 129
9년 전 조회 144
9년 전 조회 160
9년 전 조회 314
9년 전 조회 123
9년 전 조회 344
9년 전 조회 186
9년 전 조회 136
9년 전 조회 700
9년 전 조회 501
9년 전 조회 301
9년 전 조회 321
9년 전 조회 356
9년 전 조회 234
9년 전 조회 245
9년 전 조회 354
9년 전 조회 196
9년 전 조회 197
9년 전 조회 311
9년 전 조회 277
9년 전 조회 328
9년 전 조회 350
9년 전 조회 266
9년 전 조회 208
9년 전 조회 335
9년 전 조회 343
9년 전 조회 367
9년 전 조회 376
9년 전 조회 586
9년 전 조회 505
9년 전 조회 345
9년 전 조회 478
9년 전 조회 367
9년 전 조회 343
9년 전 조회 670
9년 전 조회 290
9년 전 조회 448
9년 전 조회 450
9년 전 조회 494
9년 전 조회 350
9년 전 조회 167
9년 전 조회 390
9년 전 조회 432
9년 전 조회 361
9년 전 조회 327
9년 전 조회 176
9년 전 조회 433
9년 전 조회 384
9년 전 조회 927
9년 전 조회 244
9년 전 조회 396
9년 전 조회 374
9년 전 조회 745
9년 전 조회 786
9년 전 조회 502
9년 전 조회 424
9년 전 조회 452
9년 전 조회 814
9년 전 조회 465
9년 전 조회 648
9년 전 조회 513
9년 전 조회 574
9년 전 조회 505
9년 전 조회 768
9년 전 조회 485
9년 전 조회 470
9년 전 조회 404
9년 전 조회 510
9년 전 조회 453
9년 전 조회 521
9년 전 조회 608
9년 전 조회 393
9년 전 조회 454
9년 전 조회 453
9년 전 조회 595
9년 전 조회 406
9년 전 조회 525
9년 전 조회 380
9년 전 조회 425
9년 전 조회 333
9년 전 조회 523
9년 전 조회 407
9년 전 조회 417
9년 전 조회 455
9년 전 조회 414
9년 전 조회 410
9년 전 조회 362
9년 전 조회 756
9년 전 조회 815
9년 전 조회 779
🐛 버그신고