테스트 사이트 - 개발 중인 베타 버전입니다

회원 사진 기능 만들기

http://sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=30550&sfl=mb_id%2C1&stx=happyjung&page=2

그누보드4에 적용한 해피정님의 팁을 그누보드5에 맞게 정리했습니다.


html로 작성했더니... 보이지않는 소스가 더러 있어서... 텍스트로 바꾸어 작성했습니다.
이미지는 귀찮더라도 클릭해서 보시기를...


[http://internationale.kr/data/file/info_gnuboard/1889776576_ThOokcpr_2014.10.02_01.png]

1. 여분 필드 설정을 합니다.

관리자 모드 → 환경설정 → 기본환경설정 → 여분필드
cf_1 : 58 (가로)
cf_2 : 58 (세로)
cf_3 : 50000 (파일용량)


[http://internationale.kr/data/file/info_gnuboard/1889776576_A4wbUjyi_2014.10.02_02.png]

2. 'data' 폴더 안에 'member_image' 폴더를 추가하고, 권한을 '707'로 변경합니다.

회원사진을 등록하면... 회원 아이디별로 자동으로 하위 폴더가 생성됩니다.


[code]<tr>
<th scope="row"><label for="reg_mb_1">회원사진</label></th>
<td>
<span class="frm_info">
이미지 크기는 가로 <?php echo $config[cf_1] ?>픽셀, 세로 <?php echo $config[cf_2] ?>픽셀 이하로 해주세요.<br>
gif만 가능하며 용량 <?php echo number_format($config[cf_3]) ?>바이트 이하만 등록됩니다.
</span>
<input type="file" name="mb_1" id="reg_mb_1" class="frm_input">

<?php if ($w == 'u' && file_exists($mb_1_path)) { ?>
<img src="<?php echo $mb_1_url ?>" alt="회원사진">
<input type="checkbox" name="del_mb_1" value="1" id="del_mb_1">
<label for="del_mb_1">삭제</label>
<?php } ?>
</td>
</tr>[/code]
3. '/skin/member/basic/register_form.skin.php'에 위 소스를 추가합니다.
'회원 아이콘' 관련 소스 아랫쪽에 삽입합니다.


[code]// 회원사진 경로
$mb_1_path = G5_DATA_PATH.'/member_image/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].'.gif';
$mb_1_url = G5_DATA_URL.'/member_image/'.substr($member['mb_id'],0,2).'/'.$member['mb_id'].'.gif';[/code]
4. '/bbs/register_form.php'에 위 소스를 추가합니다.
'회원 아이콘 경로' 아랫쪽에 삽입합니다.


[code]$mb1_dir = G5_DATA_PATH.'/member_image/'.substr($mb_id,0,2);

// 회원사진 삭제
if (isset($_POST['del_mb_1'])) {
@unlink($mb1_dir.'/'.$mb_id.'.gif');
}

// 회원사진 업로드
$mb_1 = "";
if (is_uploaded_file($_FILES['mb_1']['tmp_name'])) {
if (preg_match("/(\.gif)$/i", $_FILES['mb_1']['name'])) {
// 아이콘 용량이 설정값보다 이하만 업로드 가능
if ($_FILES['mb_1']['size'] <= $config[cf_3]) {
@mkdir($mb1_dir, G5_DIR_PERMISSION);
@chmod($mb1_dir, G5_DIR_PERMISSION);
$dest_path = $mb1_dir.'/'.$mb_id.'.gif';
move_uploaded_file($_FILES['mb_1']['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) // gif 파일이 아니면 올라간 이미지를 삭제한다.
@unlink($dest_path);
else
// 사진의 폭 또는 높이가 설정값 보다 크다면 이미 업로드 된 사진 삭제
if ($size[0] > $config[cf_1] || $size[1] > $config[cf_2])
@unlink($dest_path);
//=================================================================\
}
} else {
$msg .= '회원사진을 '.number_format($config[cf_3]).'바이트 이하로 업로드 해주십시오.';
}
} else {
$msg .= $_FILES['mb_1']['name'].'은(는) gif 파일이 아닙니다.';
}
}[/code]
5. '/bbs/register_form_update.php'에 위 소스를 추가합니다.
'회원 아이콘' 관련 소스 아랫쪽에 삽입합니다.


[http://internationale.kr/data/file/info_gnuboard/1889776576_w6dAVYo5_2014.10.02_03.png]

완성해서 적용해본 모습입니다.
(사진은 우리집 이쁜 큰공쥬...)

가입폼에는 적용되지않고... 가입 후 '정보수정'에서만 사용할 수 있습니다.



관리자 모드에서도 사용할 수 있게 다음 절차를 진행합니다.


[code]<tr>
<th scope="row"><label for="mb_1">회원사진</label></th>
<td colspan="3">
<?php echo help('이미지 크기는 <strong>넓이 '.$config['cf_1'].'픽셀 높이 '.$config['cf_2'].'픽셀</strong>로 해주세요.') ?>
<input type="file" name="mb_1">
<?php
$mb1_dir = substr($mb['mb_id'],0,2);
$mb_1 = G5_DATA_PATH.'/member_image/'.$mb1_dir.'/'.$mb['mb_id'].'.gif';
if (file_exists($mb_1)) {
$mb_1 = G5_DATA_URL.'/member_image/'.$mb1_dir.'/'.$mb['mb_id'].'.gif';
echo '<img src="'.$mb_1.'" alt="">';
echo '<input type="checkbox" name="del_mb_1" value="1">삭제';
}
?>
</td>
</tr>[/code]
6. '/adm/member_form.php'에 위 소스를 추가합니다.
'회원 아이콘' 관련 소스 아랫쪽에 삽입합니다.


[code]// 회원사진 삭제
if ($del_mb_1)
@unlink(G5_DATA_PATH.'/member_image/'.$mb_dir.'/'.$mb_id.'.gif');

// 회원사진 업로드
$mb_1 = "";
if (is_uploaded_file($_FILES['mb_1']['tmp_name'])) {
if (!preg_match("/(\.gif)$/i", $_FILES['mb_1']['name'])) {
alert($_FILES['mb_1']['name'] . '은(는) gif 파일이 아닙니다.');
}

if (preg_match("/(\.gif)$/i", $_FILES['mb_1']['name'])) {
@mkdir(G5_DATA_PATH.'/member_image/'.$mb_dir, G5_DIR_PERMISSION);
@chmod(G5_DATA_PATH.'/member_image/'.$mb_dir, G5_DIR_PERMISSION);

$dest_path = G5_DATA_PATH.'/member_image/'.$mb_dir.'/'.$mb_id.'.gif';

move_uploaded_file($_FILES['mb_1']['tmp_name'], $dest_path);
chmod($dest_path, G5_FILE_PERMISSION);

if (file_exists($dest_path)) {
$size = getimagesize($dest_path);
// 사진의 폭 또는 높이가 설정값 보다 크다면 이미 업로드 된 사진 삭제
if ($size[0] > $config['cf_1'] || $size[1] > $config['cf_2']) {
@unlink($dest_path);
}
}
}
}[/code]
7. '/adm/member_form_update.php'에 위 소스를 추가합니다.
'회원 아이콘' 관련 소스 아랫쪽에 삽입합니다.


[http://internationale.kr/data/file/info_gnuboard/1889776576_GuWRTorM_2014.10.02_04.png]

완성해서 적용해본 모습입니다.


올려드리는 파일은... 삽입 위치 참조용으로만 사용하십시오.
그누보드 업데이트나 사용자가 수정한 부분이 있을 수도 있기 때문입니다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 11개

감사합니다..^^
자료 감사 드려요.^^
자세히 설명하여 주셔서 회원사진 추가하였습니다.
(사진은 꼭 gif 이어야만 되어있는데 jpg나 png는 안되나요?)
감사합니다.
그런데 첨부파일 속에 '/adm/member_form.php'과 '/adm/member_form_update.php'이 아닌 memo_form.php 와 memo_form_update.php 가 들어가 있습니다.
에고... 왜 이리 덤벙거리는지...
수정해서 올렸습니다.

확장자 확대하는 방법은 찾아봐야겠네요.
적용햇네요. 한참을 헤매서 . 너무 감사드립니다.
그대로 따라했는데 적용한 모습처럼은 나오지만 댓글에는 적용이 안되네요 버전이 gnuboard5.0.38.tar 에서는 안되는건가요? 아니면 다른 옵션 같은걸 체크해야 하는건가요? 아니면 DB도 손을 봐야 하는건가요?
https://sir.kr/g5_tip/2162
오래 전에 올려주신 글이지만 찾고 있던 기능이라 적용해 보았는데
정상적으로 작동이 되지 않아 문의드립니다.
고수님들 도와주십시요~^^

영카트 5.2.9.1 버전 입니다.

사용자화면 --> 회원정보수정에서 회원사진을 첨부하면 정상적으로 업로드가 되지 않습니다.ㅠㅠ
소스는 똑같이 삽입했습니다.

어느 부분을 확인해 보아야 할까요?

(참고로 관리자화면 --> 회원관리>수정에서는 회원사진을 첨부하면 정상적으로 업로드가 됩니다.)
혹여 잘못된 부분이 있는지 점검해보았으나... 문제를 발견치 못했습니다.
회원가입 파일첨부 하려고 하는데 어렵습니다.
참고 하겠습니다

게시판 목록

그누보드5 팁자료실

글쓰기