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년 전 조회 201
9년 전 조회 138
9년 전 조회 551
9년 전 조회 175
9년 전 조회 313
9년 전 조회 187
9년 전 조회 205
9년 전 조회 166
9년 전 조회 157
9년 전 조회 215
9년 전 조회 145
9년 전 조회 158
9년 전 조회 176
9년 전 조회 328
9년 전 조회 139
9년 전 조회 361
9년 전 조회 204
9년 전 조회 152
9년 전 조회 717
9년 전 조회 518
9년 전 조회 316
9년 전 조회 337
9년 전 조회 369
9년 전 조회 256
9년 전 조회 268
9년 전 조회 374
9년 전 조회 222
9년 전 조회 216
9년 전 조회 330
9년 전 조회 291
9년 전 조회 347
9년 전 조회 368
9년 전 조회 288
9년 전 조회 222
9년 전 조회 349
9년 전 조회 352
9년 전 조회 370
9년 전 조회 382
9년 전 조회 588
9년 전 조회 506
9년 전 조회 345
9년 전 조회 479
9년 전 조회 369
9년 전 조회 344
9년 전 조회 675
9년 전 조회 298
9년 전 조회 460
9년 전 조회 464
9년 전 조회 506
9년 전 조회 374
9년 전 조회 185
9년 전 조회 410
9년 전 조회 458
9년 전 조회 372
9년 전 조회 351
9년 전 조회 196
9년 전 조회 454
9년 전 조회 397
9년 전 조회 946
9년 전 조회 267
9년 전 조회 414
9년 전 조회 392
9년 전 조회 763
9년 전 조회 804
9년 전 조회 519
9년 전 조회 433
9년 전 조회 467
9년 전 조회 828
9년 전 조회 487
9년 전 조회 670
9년 전 조회 525
9년 전 조회 601
9년 전 조회 516
9년 전 조회 793
9년 전 조회 502
9년 전 조회 489
9년 전 조회 435
9년 전 조회 541
9년 전 조회 476
9년 전 조회 533
9년 전 조회 626
9년 전 조회 412
9년 전 조회 469
9년 전 조회 475
9년 전 조회 617
9년 전 조회 427
9년 전 조회 555
9년 전 조회 396
9년 전 조회 437
9년 전 조회 346
9년 전 조회 541
9년 전 조회 422
9년 전 조회 433
9년 전 조회 472
9년 전 조회 431
9년 전 조회 425
9년 전 조회 388
9년 전 조회 774
9년 전 조회 828
9년 전 조회 793
🐛 버그신고