[추가]data 폴더 사용자 지정하도록 수정하기 > 그누4 팁자료실

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

[추가]data 폴더 사용자 지정하도록 수정하기 정보

[추가]data 폴더 사용자 지정하도록 수정하기

첨부파일

image.php (1.9K) 46회 다운로드 2009-05-28 22:35:08
upload.php (3.0K) 4회 다운로드 2009-05-28 22:35:08

본문

# 추가 된 사항:
1. image 가리기... 첨부된 파일들은 utf-8용입니다. euc-kr은 텍스트 에디터로 읽은 후 ansi로 전환하면 됩니다.
2. 이미 에디터를 사용하여 그림을 첨부한 글들이 있을 경우를 위해 수정될 부분
----------------------------------------------------------------------------------
보안은 생활화 되어야 하는데 data폴더는 지정이 불가한 폴더로 되어 있네요. 그래서 바꾸어 보았습니다.

1. 먼저 할 일은 /data로 되어 있는 부분을 $g4['data'] 이런 식으로 교환하는 일입니다.

config.php에서 다음을 추가합니다:
$g4['data'] = "data";
$g4['data_path'] = $g4['path'] . "/" . $g4['data'];


파일 열기해서 $g4[path]/data로 되어 있는 것은 모두 $g4[data_path]로 바꾸어 줍니다.
또한 common.php에서 {$g4['path']}/data로 되어 있는 부분도 $g4[data_path]로 바꾸어 줍니다.

그리고 설치시에도 적용하게 하려면 install_db.php를 열어 /data로 되어 있는 부분을 /$g4[data]로 바꾸어 줍니다.

그리고 보안을 위해 data폴더의 이름을 다른 것으로 바꾸기 원하면 config.php의 $g4['data']의 값을 바꾸고 그리고 실제 data폴더의 이름을 바꾼 값과 똑같이 바꾸어주면 됩니다.

수정되는 파일 목록:
config.php
common.php
adm/admin.lib.php
adm/board_copy_update.php
adm/board_delete.inc.php
adm/board_form.php
adm/board_form_update.php
adm/member_form.php
adm/member_form_update.php
adm/session_delete.php
bbs/write_update.php
bbs/board_head.php
bbs/board_tail.php
bbs/delete.php
bbs/delete_all.php
bbs/download.php
bbs/move_udpate.php
bbs/register_form.php
bbs/register_form_udpate.php
bbs/tb.php
cheditor/insert_image.php
cheditor4/insert_image.php
geditor/upload.php
install/install_db.php
lib/common.lib.php

2. 두번째 할 일은 이미지를 가리는 일입니다. 링크 파일의 경우는 자동적으로 가려지나 이미지는 그렇지 못합니다. 그래서 만들어 보았습니다.
먼저 첨부된 image.php 파일을 그누보드의 최상단 폴더에 넣습니다. 모든 이미지는 이 스크립트 파일을 통해 보여지게 됩니다. 그래서 자연스럽게 경로가 감추어 집니다.
나중에 시간나면 그림 뿐 아니라 동영상이나 플래쉬도 확인을 해봐야겠죠.
image.php를 업로드 했으면 이 파일을 이용하도록 소스를 수정해야 합니다. 수정할 파일들 목록은 다음과 같습니다:
cheditor/insert_image.php
cheditor4/insert_image.php
geditor/upload.php
lib/common.lib.php

(1) 먼저 cheditor/insert_image.php는 cheditor4/insert_image.php와 비슷하므로 cheditor4/insert_image.php를 위주로 설명하면 56라인정도에
$filename = SAVE_AS_URL . $attach->file['name']; 가 보입니다. 이 라인을 주석처리한 후에 다음 으로 교체하세요:
$filename = "$g4[url]/image.php?uploader=cheditor4&img=$ym%2F".$attach->file['name'];

cheditor/insert_image.php도 비슷하므로 설명을 생략합니다.


(2) geditor/upload.php는 수정할 부분이 조금 됩니다. 그래서 파일을 링크합니다. 링크된 파일을 참조하세요.

(3) lib/common.lib.php 를 열어 view_file_link함수를 열어
return "<img src='$g4[data_path]/file/$board[bo_table]/".urlencode($file)."' name='target_resize_image[]' onclick='image_window(this);' style='cursor:pointer;' title='$content'>";
를 찾아 주석처리 합니다.

그리고 다음을 대신 넣어줍니다:
return "<img src='$g4[url]/image.php?bo_table=$board[bo_table]&img=".urlencode($file)."' name='target_resize_image[]' onclick='image_window(this);' style='cursor:pointer;' title='$content'>";

이렇게 하면 업로드된 모든 이미지들은 image.php를 거쳐 화면에 뿌려지게 됩니다. 그래서 자연적으로 경로가 감추어 집니다.

================================================================
이 적용을 한 후 만일 data 폴더의 이름을 바꿀 경우 이전에 editor로 업로드한 이미지가 보이지 않을 경우가 생길겁니다. 그런 경우를 위해서 다음과 같은 코드를 삽입을 합니다.

bbs/view.php 파일을 열어 다음을 찾습니다.
$view[content] = preg_replace("/(\<img )([^\>]*)(\>)/i", "\\1 name='target_resize_image[]' onclick='image_window(this)' style='cursor:pointer;' \\2 \\3", $view[content]);

그 코드 "앞"에 다음의 코드를 추가합니다. 반드시 앞쪽에 있어야 합니다... 뒤에 있어도 되지만 시간이 조금 단축되겠죠.

추가할 코드:

function apply_image_path_hide($matches)
{
function checksrc($matches)
{
global $g4;

$pattern = '/^('.preg_quote("$g4[url]/data/", '/').'('.explode('|', array($g4[editor], $g4[cheditor], $g4[cheditor4])).')\/)([0-9]{4})\/(.*)$/i';
$src = preg_replace($pattern, "$g4[url]/image.php?uploader=\\2&img=\\3%2F\\4", $matches[1]);
return 'src="'.$src.'"';
}

$matches[2] = preg_replace_callback("/src=\"([^\"]+)\"/i", checksrc, $matches[2]);
return $matches[1].$matches[2].$matches[3];
}

$view[content] = preg_replace_callback("/(\<img )([^\>]*)(\>)/i", apply_image_path_hide, $view[content]);
추천
3

댓글 10개

그런데 보안때문에 그런다면 소용 없을 것 같네요.
업로드된 파일은 거의 노출이기떄문에 data디렉토리는 금방 유추가 가능 할것 같네요
이 적용을 한 후 만일 data 폴더의 이름을 바꿀 경우 이전에 cheditor로 업로드한 이미지가 보이지 않을 경우가 생길겁니다. 그런 경우를 위해서 다음과 같은 코드를 삽입을 합니다.

bbs/view.php 파일을 열어 다음을 찾습니다.
$view[content] = preg_replace("/(\<img )([^\>]*)(\>)/i", "\\1 name='target_resize_image[]' onclick='image_window(this)' style='cursor:pointer;' \\2 \\3", $view[content]);

그 코드 "앞"에 다음의 코드를 추가합니다. 반드시 앞쪽에 있어야 합니다... 뒤에 있어도 되지만 시간이 조금 단축되겠죠.

추가할 코드:
function apply_image_path_hide($matches)
{
function checksrc($matches)
{
global $g4;

$pattern = '/^('.preg_quote("$g4[url]/data/$g4[editor]/", '/').')([0-9]{4})\/(.*)$/i';
$src = preg_replace($pattern, "$g4[url]/image.php?uploader=$g4[editor]&amp;img=\\2%2F\\3", $matches[1]);
return 'src="'.$src.'"';
}

$matches[2] = preg_replace_callback("/src=\"([^\"]+)\"/i", checksrc, $matches[2]);
return $matches[1].$matches[2].$matches[3];
}

$view[content] = preg_replace_callback("/(\<img )([^\>]*)(\>)/i", apply_image_path_hide, $view[content]);
추가할 코드를 수정합니다... 아빠불당님이 지적해주셨는데 에디터를 여러개 쓸 경우가 존재한다는 점을 망각한 것 같아요... 위의 코멘트를 수정하려고 했는데 답글 코멘트가 달려서 수정이 안되네요... 그리고 원본 글에도 추가해야 겠습니다.

function apply_image_path_hide($matches)
{
function checksrc($matches)
{
global $g4;

$pattern = '/^('.preg_quote("$g4[url]/data/", '/').'('.explode('|', array($g4[editor], $g4[cheditor], $g4[cheditor4])).')\/)([0-9]{4})\/(.*)$/i';
$src = preg_replace($pattern, "$g4[url]/image.php?uploader=\\2&amp;img=\\3%2F\\4", $matches[1]);
return 'src="'.$src.'"';
}

$matches[2] = preg_replace_callback("/src=\"([^\"]+)\"/i", checksrc, $matches[2]);
return $matches[1].$matches[2].$matches[3];
}

$view[content] = preg_replace_callback("/(\<img )([^\>]*)(\>)/i", apply_image_path_hide, $view[content]);
전체 10 |RSS
그누4 팁자료실 내용 검색
  • 개별 목록 구성 번호 제목 작성자 작성일 추천 조회
  • 게시물이 없습니다.

회원로그인

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