글쓰기 할때 외부링크 이미지 모두 저장하기 사용

글쓰기 할때 외부링크 이미지 모두 저장하기 사용

QA

글쓰기 할때 외부링크 이미지 모두 저장하기 사용

본문

팁자료실에 있는 글쓰기 할때 외부링크 이미지 모두 저장하기 사용하려고하는데요

 

외부이미지가 파일로 저장은 잘되는데 이미지가 두개씩 나와요....

 

외부이미지주소가 있는 사진과 제사이트에 저장된 주소가있는 사진 두개가 같이 나와요

 

외부이미지주소는 안나오고 제 사이트에 저장된주소의 이미지만 보여지게 하고싶은어요

 

write_update.head.skin.php에서 조절하는거 같은데 어딘지 알수가 없어서요 ㅠㅠ

 

알려주시면 감사하겠습니다....

 

https://sir.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=21620

write_update.head.skin.php

<?php
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가 

/****************************************************************************************************
*     프로그램명        :    그누보드 게시판 플러그인 - 게시판 글쓰기시 외부링크 이미지 모두 저장
*     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] = "curl";    // 이미지를 읽어오는 방식, 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]");
    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";
        $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, $_filename, $data ,$_bo_table, $_wr_id, $_filesize) {
    global $g5;
    
    $board_file_path = G5_DATA_PATH."/file/$_bo_table";
    
    // 디렉토리가 없다면 생성합니다. (퍼미션도 변경하구요.)
    ("$board_file_path", 0707);
    @chmod("$board_file_path", 0707);
    
    //$dest_file = "image_save/";        //저장경로
    
    $file = $board_file_path."/".$_filename; 
    
    if (!file_exists($file)) {
        $fp = @fopen ($file, 'w');
        if(!$fp) return false;
        fwrite ($fp, $data);
        fclose ($fp);
        
        // 올라간 파일의 퍼미션을 변경합니다.
        chmod($file, G5_FILE_PERMISSION);        
        
    
        /******************************************************************/
        /*    파일 테이블 행에 저장                                       */ 
        /******************************************************************/         
        $now = date( "Y-m-d H:i:s", time()); // 현재시각
        $timg = @getimagesize($file); // 가로 세로 타입 정보
        $bf_no = 0;
        $sql = "select max(bf_no) as bf_no from {$g5['board_file_table']} where bo_table = '{$_bo_table}' and wr_id = '$_wr_id'";
        $row = sql_fetch($sql, false);
    
        if ($row[bf_no] <> null)  $bf_no = $row[bf_no] + 1;
    
        //if ($row[bf_no] >= 0) $bf_no = $row[bf_no] + 1;

        $sql = " insert into {$g5['board_file_table']}
                    set bo_table = '{$_bo_table}',
                         wr_id = '{$_wr_id}',
                         bf_no = '{$bf_no}',
                         bf_source = '{$_file}',
                         bf_file = '{$_filename}',
                         bf_filesize = '{$_filesize}',
                         bf_width = '{$timg[0]}',
                         bf_height = '{$timg[1]}',
                         bf_type = '{$timg[2]}',
                         bf_datetime = '{$now}'";
        $qry = sql_query($sql, false);
        
        // 파일의 개수를 게시물에 업데이트 한다.
        $write_table = $g5['write_prefix'] . $_bo_table;
        
        $row = sql_fetch(" select count(*) as cnt from {$g5['board_file_table']} where bo_table = '{$_bo_table}' and wr_id = '{$_wr_id}' ");
        sql_query(" update {$write_table} set wr_file = '{$row['cnt']}' where wr_id = '{$_wr_id}' ");
        
        /******************************************************************/         
    }
    return true;
}

function image_save_run() {
    global $g5, $errMsg, $imgSave;

    $img_content = stripslashes($_POST[wr_content]);
    $img_content = str_replace("<", "<", $img_content);
    $img_content = str_replace(">", ">", $img_content);
    $patten = "/<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>/i";
    preg_match_all($patten, $img_content, $match); 


    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 { ; } // 사이트 목록에 없다면 통과
                        }
                        /******************************************************************/
                        /*    저장 파일 이름 생성 부분                                    */ 
                        /******************************************************************/ 
                        $_ori_filename = $image[basename] . ($image[extension]?".".$image[extension]:"");
                        // 아래의 문자열이 들어간 파일은 -x 를 붙여서 웹경로를 알더라도 실행을 하지 못하도록 함
                        $saveFileName = preg_replace("/\.(php|phtm|htm|cgi|pl|exe|jsp|asp|inc)$/i", "$0-x", $_ori_filename);
                        
                        $now = date( "Y-m-d H:i:s", time()); // 현재시각
                        // 접미사를 붙인 파일명
                        $saveFileName = abs(ip2long($_SERVER['REMOTE_ADDR'])).'_'.substr(md5(uniqid($now)), 0, 8).'_'.str_replace('%', '', urlencode($saveFileName)); 

                        if (image_save($_ori_filename, $saveFileName, $image[body], $_POST[bo_table], $_POST[wr_id], $image[filesize]))                
                            $img_content = str_replace($link, ("../data/file/".$_POST[bo_table]."/".$saveFileName), $img_content);                    
                        else $errMsg = "파일 저장 실패";
                    }
                    else $errMsg = "1개 이상 저장하지 못한 이미지 있음";                
                    
            }
        }
        return $img_content;
    }
    else
        return false;
}
?>

이 질문에 댓글 쓰기 :

답변 1

자기가 올린이미지라면 파일첨부로 나올텐데 그걸 뷰페이지에 안보이게 처리하면됩니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 263
QA 내용 검색

회원로그인

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