view_image 플러그인입니다. 이미지를 php화.. > 그누보드5 플러그인

그누보드5 플러그인

그누보드는 다양한 기능을 추가하기 쉽습니다.

view_image 플러그인입니다. 이미지를 php화.. 정보

view_image 플러그인입니다. 이미지를 php화..

첨부파일

view_image.tgz (8.1K) 60회 다운로드 2015-09-23 16:43:41

본문

제목을 딱히 뭐라고 정해야할지 몰라서 ㅎ_ㅎ

아무튼 이 플러그인은 그누보드5용입니다.

이 플러그인을 다운로드후 그누보드5가 설치된 곳에 업로드합니다.

압축파일안의 디렉토리도 함께 있기 때문에 설치된곳에 업로드하시면 자동으로
plugin 디렉토리 안에 올라갑니다.
이것이 이해가 다소 어렵다면 그냥 압축을 자신의 PC에 해제한후 plugin/ 안에 있는
view_image 디렉토리를 통째로 그누보드 설치된곳의 plugin 안에 올려주시면 됩니다.

사용방법은 간단합니다.

이미지를 보여줘야 할 페이지내
(이럴테면 최근게시물이나 게시판 뷰등)
 소스안에 보여주어야 할 이미지를 추출하는 소스를 구성하신후
구성하여 나온 이미지주소 또는 경로와 파일이름이 담긴 변수를 넘겨주면 됩니다.
단, 웹주소일경우 url 그렇지 않을경우 file 과 함께 넘겨줘야합니다.

ex. $code = base64_encode("url::".$image_file);
    <img src="<?php echo G5_PLUGIN_URL;?>/view_image/view.php?code=<?php echo $code;?>" border="0">

이 플러그인은 파일내용을 읽어와 이미지형태로 재가공하여 뿌려주는것으로
XSS에 대한 보안대비로 사용할수도 있을것으로 보입니다.

또한, 넘겨받은 파일이 이미지파일이 아니면 플러그인 디렉토리내의 img 디렉토리에 있는
noimage.gif 파일을 대체하여 뿌려주며 파일이 없거나 가공중 시스템적 문제로 오류가 생긴 경우에는 nofile.gif
파일을 뿌려줍니다.
code 값을 부여받지 못한경우에는 nocode.gif 파일을 뿌려주도록 되어있습니다.

이렇게 완성되어 실제 보여지는 이미지에서 마우스 오른쪽 클릭하여 속성으로 본 이미지 파일명에는
경로/view.php?code=암호화된코드값 으로 보이게 됩니다.

물론 이 플러그인의 의도는 이미지 유출을 막기 위함이 아니며
이미지 원본파일명을 감추어 의도적인 접근이나 XSS크래킹등을 막기 위해 기술된것입니다.

본 플러그인은 file_get_contents 함수를 사용하고 있습니다만
allow_url_open 옵션과 관련없이 사용가능합니다.
이는 URL에 존재하는 이미지파일을 서버로 한번 다운로드한후 뿌려주고
다운로드한 이미지는 삭제처리 되기 때문에 가능합니다.

때문에 그누보드5가 설치된 디렉토리내 data 디렉토리 안에 view_images 디렉토리가 생성됩니다.

※ 이 플러그인을 사용하기 위해서는 CURL 모듈이 필요합니다.

아래는 최근게시물에서 이미지를 뽑아 view_image 플러그인으로 전달해주는 예제소스입니다.
이 소스는 에디터를 이용하여 업로드된 이미지도 추출이 가능합니다.


   $wrid = $list[$i][wr_id];
   $sql_img = sql_fetch ("select* from {$g5['board_file_table']} where wr_id = '$wrid' and bo_table='$bo_table' and bf_no = '0'");

   if($sql_img['bf_file']){
       $img_links = G5_PATH.'/data/file/'.$bo_table.'/'.$sql_img[bf_file];
       $viewimg = base64_encode("file::".$img_links); 
    }else{
      $matches = get_editor_image($list[$i]['wr_content']);
      preg_match("/src=[\'\"]?([^>\'\"]+[^>\'\"]+)/i", $matches[1][0], $m);
      // 이미지 path 구함
      $p = parse_url($m[1]);
      if(strtolower($p['host']) != strtolower($_SERVER["SERVER_NAME"])) {
	$data_path = $p['scheme']."://".$p['host'].$p['path'];
	$viewimg = base64_encode("urls::".$data_path);
      }
     else {

       if(strpos($p['path'], '/'.G5_DATA_DIR.'/') != 0) {
         $data_path = preg_replace('/^\/.*\/'.G5_DATA_DIR.'/', '/'.G5_DATA_DIR, $p['path']);
         $viewimg = base64_encode("urls::".$data_path);
       }
      else {
        $data_path = G5_PATH.$p['path'];
        $viewimg = base64_encode("file::".$data_path);
      }
    }
}
        
if(!$viewimg) 
   $viewimg = base64_encode($latest_skin_path.'/img/noimg.png');



위 소스는 해당 게시판의 게시글에 첨부파일 0번에 이미지파일이 존재하면
첨부파일로 읽어오며 없으면 에디터상의 첨부된 이미지를 가져오며
그마저도 없으면 최근게시물 스킨디렉토리내 img 디렉토리안에 있는 noimg.png 파일을
읽어 뿌려줍니다.

만약 첨부된 이미지파일이 첨부파일 0번이 아니라면 해당 번호로 바꿔주시거나
아래 소스를 이용하여 이미지파일여부를 조사하여 넣어줍니다.


   $result = sql_query("select* from {$g5['board_file_table']} where wr_id = '$wrid' and bo_table='$bo_table'");
   
   while($row = @mysql_fetch_array($result))
   {
       
          $imgs = G5_PATH.'/data/file/'.$bo_table.'/'.$row['bf_file'];
          $itype = @getimagesize($imgs);
          
         if($itype[2] == 1 || $itype[2] == 2 || $itype[2] == 3) { // 이미지 파일이면
          $img_links = $imgs;
          break;
         }
   }

   //아래 소스를
   if($sql_img['bf_file']){
       $img_links = G5_PATH.'/data/file/'.$bo_table.'/'.$sql_img[bf_file];
       $viewimg = base64_encode("file::".$img_links); 

 // 아래 소스로 수정
  
if(strlen(trim($img_links)) > 0 ) 
     $viewimg = base64_encode("file::".$img_links); 



단지사이트도 대부분의 이미지처리를 이 플러그인을 이용하여 하고 있습니다.

본 플러그인은 단지에서 개발된것입니다.
사용중 문제가 있는경우 리플 또는 단지로 방문하시어 질문남겨주시면 답을 드리겠습니다.
추천
3

댓글 전체

전체 504
그누보드5 플러그인 내용 검색

회원로그인

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