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

g4용 외부이미지 저장을 g5로 수정 도와주세요! 채택완료

덕서리 10년 전 조회 3,026

http://sir.co.kr/g4_tiptech/21620#vcmt_anchor" style="color: rgb(0, 0, 0); font-family: 돋움, Dotum, sans-serif; font-size: 14.003999710083px; line-height: 25.2071990966797px;">http://sir.co.kr/g4_tiptech/21620#vcmt_anchor 

의에 팁은 g4용인데 g5에 맞게 수정할수있을까요?

​도움 부탁드립니다~~!

 

 

<?

/****************************************************************************************************

*     프로그램명 : 그누보드 게시판 플러그인 - 게시판 글쓰기시 외부링크 이미지 모두 저장

*     Version : 1.30

*     제작일 : 2009-11-12 오전 00:00

*     최근 수정일 : 2009-12-19 오전 09:00

*     업데이트 내역

         1. 특정 사이트 지정 및 지정한 사이트에 대한 동작 기능 추가 (1.1버전)

2. 외부링크 이미지가 있을 경우에만 동작하고 없을 경우 그누보드 코드를 따름 (1.11버전)

3. CURL 모듈 이용 이미지 저장 방식 추가 (1.2버전)

4. referer 추가 (1.30버전)

****************************************************************************************************/

$imgSave[max] = 0; // 저장가능한 최대사이즈, max 보다 작아야만 저장한다. byte 단위, 0이면 무제한, 1MB 지정하려면 (1024*1024)

$imgSave[min] = 0; // 저장가능한 최소사이즈, min 보다 커야만 저장한다. byte 단위, 0이면 무제한

$imgSave[site] = "*"; // 사이트 지정, 쉼표로 구분, *는 전체사이트를 말함

$imgSave[mode] = 1; // 지정한 사이트의 대한 동작, 1이면 site 저장, 0이면 site 제외

$imgSave[type] = "sock"; // 이미지를 읽어오는 방식, sock : fsockopen함수 이용,     curl : CURL 모듈 이용

 

if ($imgSave[type] == "curl" && !function_exists("curl_init")) alert("CURL 모듈이 설치되어 있지 않습니다. imgSave[type]을 sock 으로 변경해주세요.");

 

$img_content = image_save_run();

if ($img_content) $_POST[wr_content] = addslashes($img_content);

$wr_content = $_POST[wr_content];

 

function remote_read_curl($urlstr) {

$url = parse_url2($urlstr);

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $urlstr); 

curl_setopt($ch, CURLOPT_REFERER, "http://$url[domain]">http://$url[domain]");

curl_setopt ($ch, CURLOPT_RETURNTRANSFER,  1);

$body = curl_exec ($ch);

$header = curl_getinfo($ch);

    curl_close($ch);

 

return array("data"=>implode(";", $header)."\r\n\r\n".$body, "domain"=>$url[domain], "file"=>$url[file], "basename"=>$url[basename], "extension"=>$url[extension], "url"=>$urlstr, "header"=>$header, "body"=>$body, "filesize"=>$header[size_download]);

}

 

function remote_read_sock($urlstr) {

$url = parse_url2($urlstr);

$data = "";

$res = fsockopen($url[domain], 80, $strErrorNo, $strErrStr, 2);

if($res) {

$headerstr = "GET $urlstr HTTP/1.0\r\n"; 

$headerstr.= "Host:{$url[domain]}:80\r\n"; 

$headerstr.= "referer:http://$url[domain]\r\n">http://$url[domain]\r\n";

$headerstr.= "\r\n";

fputs($res, $headerstr);

while (!feof($res)) {

$data.= fgets($res, 1024); 

fclose($res);

if (stristr($data, "Not Found") || stristr($data, "Bad Request") || stristr($data, "Forbidden"))

return false;

} else return false;

 

$patten = "/Content\\-Length:\\s+([0-9]*)\\r\\n/i";

preg_match($patten, $data, $match);

if ($match) $filesize = $match[1];

else $filesize = 0;

 

$dataset = explode("\r\n\r\n", $data);

 

return array("data"=>$data, "domain"=>$url[domain], "file"=>$url[file], "basename"=>$url[basename], "extension"=>$url[extension], "url"=>$urlstr, "header"=>$dataset[0], "body"=>$dataset[1], "filesize"=>$filesize);

}

 

function parse_url2($urlstr) 

{

$url = parse_url($urlstr);

$domain = str_replace("www.", "", $url[host]); // 도메인

$file = substr($url[path], strrpos($url[path], "/")+1); // 파일명

$basename = str_replace("%", "", substr($file, 0, strrpos($file, "."))); // 파일명 (확장자 제외)

if (empty($basename)) {

$basename = $file;

$extension = "";

} else $extension = substr($file, strrpos($file,".") + 1); // 확장자

return array("url"=>$urlstr, "domain"=>$domain, "file"=>$file, "basename"=>$basename, "extension"=>$extension);

}

 

function image_save($file, $data) {

global $g4;

@mkdir("$g4[path]/data/$g4[cheditor4]/", 0707);

@chmod("$g4[path]/data/$g4[cheditor4]/", 0707);

$ym = date("ym", $g4[server_time]);

define('SAVE_AS_DIRECTORY', "$g4[path]/data/$g4[cheditor4]/$ym/");

@mkdir(SAVE_AS_DIRECTORY, 0707);

@chmod(SAVE_AS_DIRECTORY, 0707);

 

if (!file_exists($file)) {

$fp = @fopen ($file, 'w');

if(!$fp) return false;

fwrite ($fp, $data);

fclose ($fp);

}

return true;

}

 

function image_save_run() {

global $g4, $imgSave;

 

$img_content = stripslashes($_POST[wr_content]);

$img_content = str_replace("&lt;", "<", $img_content);

$img_content = str_replace("&gt;", ">", $img_content);

$patten = "/<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>/i";

preg_match_all($patten, $img_content, $match); 

$dest_file = "data/$g4[cheditor4]/".date("ym")."/"; //저장경로

if ($match[1]) {

foreach ($match[1] as $link) {

$url = parse_url($link);

if ($url[host] && $url[host] != $_SERVER['HTTP_HOST']) {

$image = $imgSave[type]=="sock"?remote_read_sock($link):remote_read_curl($link);

if ($image) {

if ($imgSave[min] && $imgSave[min] > $image[filesize]) continue; // 이미지가 최소크기보다 작으면 저장안함

if ($imgSave[max] && $imgSave[max] < $image[filesize]) continue; // 이미지가 최대크기보다 크면 저장안함

$siteList = explode(",", trim($imgSave[site]));

$siteListCnt = count($siteList);

$site_exists = false; // 지정한 도메인에 포함이 되어 있는지 여부

for($c=0; $c<$siteListCnt; $c++) {

if (stristr($image[domain], $siteList[$c])) { // 지정한 도메인에 포함이 되어 있다면

$site_exists = true;

break;

}

}

 

if ($imgSave[mode]) { // action이 저장일 경우

if ($site_exists || $imgSave[site] == "*") { ; } // 사이트 목록에 있거나 전체사이트에 적용이라면

else continue;

}

else { // action이 제외일 경우

if ($site_exists || $imgSave[site] == "*") continue; // 사이트 목록에 있거나 전체사이트에 적용이라면

else { ; } // 사이트 목록에 없다면 통과

}

 

$saveFileName = $dest_file.$image[basename]."_".random_generator(8, 15) . ($image[extension]?".".$image[extension]:"");

if (image_save($g4[path]."/".$saveFileName, $image[body]))

$img_content = str_replace($link, ($g4[path]."/".$saveFileName), $img_content);

}

}

}

return $img_content;

}

else

return false;

}

 

function random_generator ($min=8, $max=32, $special=NULL, $chararray=NULL) { 

    $random_chars = array(); 

    

    if ($chararray == NULL) { 

        $str = "abcdefghijklmnopqrstuvwxyz"; 

        $str .= strtoupper($str); 

        $str .= "1234567890"; 

 

        if ($special) { 

            $str .= "!@#$%"; 

        } 

    } 

    else { 

        $str = $charray; 

    } 

 

    for ($i=0; $i<strlen($str)-1; $i++) { 

        $random_chars[$i] = $str[$i]; 

    } 

 

    srand((float)microtime()*1000000); 

    shuffle($random_chars); 

 

    $length = rand($min, $max); 

    $rdata = ''; 

    

    for ($i=0; $i<$length; $i++) { 

        $char = rand(0, count($random_chars) - 1); 

        $rdata .= $random_chars[$char]; 

    } 

    return $rdata; 

 

?> 

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

답변 2개

채택된 답변
+20 포인트

팁자료실에 이미 올라와져 있습니다 ^^

로그인 후 평가할 수 있습니다

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

10년 전
헉 몰랐네요!! g4에서만 찾아보다가 ㅜㅜ 알려주셔서 감사합니다.^^
로그인 후 평가할 수 있습니다

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

답변을 작성하려면 로그인이 필요합니다.

로그인