쪽지4 - 4.0.1 (베타 3) > 그누4 플러그인

그누4 플러그인

그누보드에는 여러가지 기능 추가가 쉽도록 제작 되었습니다.
플러그인의 저작권은 해당 플러그인 제작자님께 있으며, 그누보드의 저작권과 다를 수 있습니다.
플러그인 다운로드시 좋아요와 감사의 코멘트를 남기시면 제작자에게 큰 힘이됩니다. ^^y

쪽지4 - 4.0.1 (베타 3) 정보

쪽지4 - 4.0.1 (베타 3)

첨부파일

memo4-4.0.1.zip (217.1K) 16회 다운로드 2009-02-26 10:43:20

본문

Lusia아님의 도움으로 쪽지4의 불필요한 파일을 처리하는 부분을 보강하였습니다.

불필요 파일은 /data/memo2_deleted라는 디렉토리에 저장이 되게 됩니다.
디렉토리는 설치시 생기거나 첨부파일이 있는 파일을 trash에서 삭제할 때 생깁니다.
data 디렉토리 권한을 707로 잠시 바꾸신후에 첨부파일이 있는 메모를 지워주시거나
해당 디렉토리를 만들고 nobody, nobody로 owner,group을 바꿔주시면 됩니다.

css/div는 코딩이 아주 좋아졌지만 ie에서 이상현상이 발생해서 아직 적용안했습니다.
css/div만 적용이 되면, 어지간한 목적에는 충분할 것 같습니다.

그리고 resize의 버그를 어제로 다 잡아서 (제 판단으로) 쪽지4에 첨부되는 이미지로 인한
traffic의 감소에 도움이 조금은 될 겁니다. 은근히 쪽지에 이미지 첨부하는 사람들 많아요.

---

- 수정내역
  adm/memo4_install_update.php
  bbs/memo2_chkunlinkfile.php
  bbs/memo2_form_delete.php
  bbs/memo2_form_delete_trash_all.php
  bbs/memo2_config_update.php
  extend/bd.lib.php
  lib/thumb.lib.php
  skin/member/basic/memo2_config.skin.php

- 첨부파일 삭제 (memo2_deleted로 이동후 삭제, Lusia님 협찬) ...
  skin/member/basic/memo2_config.skin.php
  bbs/memo2_config_update.php

  bbs/memo2_chkunlinkfile.php
  bbs/memo2_form_delete.php
  bbs/memo2_form_delete_trash_all.php

- 누락파일 (썸네일 생성. 첨부이미지가 크면 쪽지 크기에 맞춰 보여주는 썸네일을 만듭니다)
  lib/thumb.lib.php

- 이미지 resize 오류 수정 (resize 1.0.3)
  extend/bd.lib.php

- 설치프로그램 수정 (data/memo2_deleted 디렉토리 만들게)
  adm/memo4_install_update.php
추천
0

댓글 전체

생각해보니 큰 실수를 했습니다.

첨부파일이동하는 3개의 파일에서 아래 구문이 문제있습니다.

$file_deleted_path = "$g4[path]/data/memo2_deleted";
@copy($filepath, $file_deleted_path);

요기서 $file_deleted_path 내에 파일명이 지정되어 있지 않아 파일 이동이 되지 않습니다.
아래와 같은 형식으로 변경해야 합니다. ㅠㅠ

$file_deleted_path = "$g4[path]/data/memo2_deleted/";
if(!is_dir($file_deleted_path.$member[mb_id])){
@mkdir($file_deleted_path.$member[mb_id], 0707);
@chmod($file_deleted_path.$member[mb_id], 0707);
}
@copy($filepath, $file_deleted_path.$result[me_file_server]);
저는 테스트는 안해봤지만, 디렉토리만 지정하면 그냥 그이름으로 들어가는거 아닌가요?
mb_id로 나누는거는 삭제파일의 중복을 막기 위해서 필요한거 같구요.
http://kr.php.net/manual/kr/function.copy.php
http://kr.php.net/manual/kr/function.rename.php

링크의 코멘트로 볼때 파일명도 지정해야 하는것 같습니다.
(최소한 제 테스트에서는 파일명을 지정하지 않을때에는 복사가 되지 않았습니다.)

조금 정보를 찾아보니 파일 이동은 copy 보다는 rename 함수를 사용하라고 되어있네요.
(확실히 복사->지우기 보다는 경로/이름수정의 작업이 서버 부하가 적겠죠.)

mb_id로 나눈 이유는 제가 추가적으로 수정/작성하는 코드때문에 해놨었습니다. ㅡ,.ㅡ;
으음...; rename이 어디에 문제가 있을까요 ;ㅅ;
함수 설명에도 Renames a file or directory로 되어 있고 제가 못찾는건지 문제될 만한 내용을 찾을 수가 없어요.
테스트해도 제가 의도한 대로 동작하구요 ;ㅅ;
같은 파일이 있으면, copy는 엎어쓰고 rename은 오류를 낸다고 합니다.
어떤 이유로 파일의 이름만 존재하게 된 경우 해당 파일 이름으로 rename
하게 되면, 오류가 나고 꽝~이지만 copy는 위에 엎어쓰게 되는것이죠.
아...그런 문제였군요. @_@;

if(file_exists($target))
 @unlink($target);
@rename($source,$target);

이런식으로 쓰면 어떨까요?
copy보다는 file_exists가 비용이 더 적을거 같은데...
thumb.lib.php에서 png 처리할때 문제가 있습니다.
imagepng의 퀄리티는 0~9까지 사용 가능합니다.
101라인의(해당 라인 구문 "else if ($size[2] == 3){") 다음라인에 아래 내용을 넣어야 할 것 같습니다.

if($quality>9)
$quality=$quality/9;
감사합니다.
아직 한번도 png를 처리하지 않아서 몰랐네요 (이부분은 리자님 코드가 원본인데...)

(int)($quality/10)

이미지 타입에 상관없이, 100을 기준으로 quality를 부여한 것이라,

        imagepng($target, $thumb_file, (int)($quality/10)); //imagepng의 퀄리티는 0~9까지 사용 가능합니다.
푸흣... 겨우 이미지 표시되게 수정해봤네요.
제가 불당팩 사용자가 아니라서(또는 제맘대로 코드를 써서) 그런지는 몰라도...

/lib/thumb.lib.php
요기서는 $width 값이 넘어오지 않는 문제가 있습니다.

/extend/bd.lib.php
요기에는 $board['bo_image_width'] 가 지정되어 있지 않아서 img태그를 width="" 으로 만들어 버립니다.

이 두개만 수정하시면 섬네일 생성/표시는 되는것 같습니다.
function resize_content($content, $width=0)
{
    if ($width > 0)
        $board['resize_img_width'] = (int)$width;

    return preg_replace_callback('/\<img[^\<\>]*\>/i', 'resize', $content);
}

callback에서 부르는 함수에서는 글로벌 변수밖에 못 쓰서 $width 값을 넘겨줄 수가 없습니다.
그래서 resize_content(이미지가 있는 html, $width) 와 같이 하면, 전역변수인 $board['resize_image_width']에 값을 넣어버립니다. $width에 값이 없으면, $board[bo_image_width]의 값을 thumbnail에서 사용하구요.

쪽지4의 경우에는 skin/member/basic/memo2_view.skin.php의 가장 앞부분에서

// resize를 위한 넓이를 지정
$board[resize_img_width] = $max_img_width;

지정하고 있습니다.

이미지 태그 프로세싱에 인자를 줄 수 없는 callback함수를 써서 좀 이상하게 보일 겁니다.
$board['bo_image_width']의 경우에는
/extend/bd.lib.php의 아래 구문(대략 30라인쯤)에서 문제가 발생합니다.

if ($max_img_width <= 0) {
..
    } else if ($max_img_width > $board['bo_image_width']) {
        $max_img_width = $board['bo_image_width'];
    }

$max_img_width가 0보다 크게 지정되어 있기 때문에 elseif문으로 들어가는데, 여기서는 $board['bo_image_width']값이 지정되어 있지 않아서 $max_img_width를 null로 때려버립니다.
때문에 70라인 근처의 width조정에서 width="$max_img_width"가 width=""로 되어 버립니다.

$board['bo_image_width']=$max_img_width; 비슷한 초기화도 해줘야 할 것 같습니다.
아~ 다시 보겠습니다. 요즘 머리가 굳어서 ㅠ..ㅠ...

$max_img_width에 값이 있으면 무조건 그걸 쓰는게 맞네요.
else if 코드를 삭제했어요
/skin/member/skin/memo2_view.skin.php
상단에
<script src="<?=$g4[path]?>/js/add_to.common.js"></script>
를 누락하셨습니다.
(해당 코드 삽입후 정상적으로 원본 이미지가 새창으로 뜹니다.)
아... 이게...

common.js에 해당 내용을 삽입하라는 겁니다. ㅠ..ㅠ...
add_to.common.js 파일의 내용을 copy해서 common.js에 넣어주세요.
음..음... 이것도 헷갈릴 수 있으니 방법을 생각해 봐야 하겠네요.
전체 3,524 |RSS
그누4 플러그인 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT