외부이미지를 내계정으로 끌어오기 - 업뎃(삭제지원) > php

본문 바로가기

php

외부이미지를 내계정으로 끌어오기 - 업뎃(삭제지원)

작성일 07-07-13 11:53

페이지 정보

작성자서방님 조회 152회 댓글 1건

본문

블로그 이용자들 또는 스크랩이 취미인분들에게 추천하는 소스입니다.
(손님에게 공개기능으로 쓰자니...계정 용량이 맘에 걸리는지라....ㅋㅋ)

html 태그를 직접 작성하거나 에디터를 이용하여 게시판 또는 블로그에 글 작성시 이미지를 삽입하면
<img src="이미지 주소"> 이런식으로 저장이 되지요, 그쵸?

그때 저 이미지의 주소가 외부계정일경우 읽어다가 본인의 계정에 저장해주고 글 내용에서 주소를 계정에 저장된 위치로 바꿔줍니다.

다른곳에서 긁어다가 붙여넣기했는데 나중에 링크된 이미지가 없어져서 엑박으로 나오는 일이 더이상은 없겠죠? ^^

아차차...숨겨진 뽀나스 기능!
* 외부링크를 막아둔 네이버 그리고 싸이의 이미지도 잘~ 저장됩니다 ^^

원리:

글내용의  html 소스를 입력받아 img 태그의 src 만 뽑아와서 외부이미지라면 긁어서 계정에 저장하고나서 img 태그의 src 를 계정에 있는 화일의 주소로 교체해줍니다.이때 싸이의 이미지는 싸이에 로그인 한뒤 저장하는 방식입니다.
설치법:

imageSaver.zip 을 다운받고 그 안에 화일들(2개)을 임의의 폴더에 풀어넣어줍니다.
  
imagesaver.php 를 여시고 주석을 참고하시면서 2곳(6줄 & 104줄 이하)에 설정 정보를 넣어줍니다.
(경로, 아이디, 도메인 등등... 이때 계정에 이미지 저장 폴더생성및 권한설정도 잊지 마시길)

설정이 끝났으면 2개의 화일을 계정에 아무대나 원하는곳에 업로드 합니다.
사용법:

글을 DB 에 저장시키는 기능을 하는 화일에
    include "imagesaver.php";
해줍니다. (이때 imagesaver.php 의 경로에 주의! 어디다 업로드 했느냐에 따라 다르겟죠?)

예를 들어 $memo 라는 변수에 글 내용이 있다면 그 내용이 DB 에 들어가기 직전에
    $memo= saveRemoteImage($memo);
라고 처리해줌으로서 외부이미지를 저장시켜줍니다.

이미지가 크거나, 많거나...기타 등등~ 글의 저장시간이 평소보다 길어지는점 유의하시구요.
(당연한거죠? ^^)

삭제를 담당하는 화일에도 역시
    include "imagesaver.php";
해줍니다. (역시 imagesaver.php 의 경로에 주의! 어디다 업로드 했느냐에 따라 다르겟죠?)

예를 들어 $s_data['memo'] 라는 변수에 삭제될 글의 내용이 있다면 DB 에서 삭제가 완료된 후에
    deleteRemoteImage($s_data['memo']);
라고 처리해줌으로서 외부이미지를 삭제시켜줍니다.

흠.. 아는데로 자세한 사용법 나갑니다.




1. 제로보드 사용자

    글작성 및 수정


        write_ok.php 화일에서...
        126줄 (원본기준) 에 있는
        $memo=addslashes($memo); 의 아랫줄에 다음과 같이 넣어줍니다.

        include "imagesaver.php";
        $memo = saveRemoteImage($memo);

        이때 본 기능을 관리자만 쓰고 싶다거나... 게시판별로 적용하고 싶다거나 할때는

        if ($member[is_admin] == 1) {
        ....
        }

        또는

        if ($id == "적용할 게시판 아이디") {
        ....
        }

        등의 간단한 if 구문으로 위에 추가한 2줄을 감싸주시면 됩니다.



    글 삭제


        1. delete_ok.php 화일에서...

        // 카테고리 필드 조절
        mysql_query("update $t_category"."_$id set num=num-1 where no='$s_data[category]'",$connect);

        의 다음줄에 아래처럼 넣어줍니다.

        include "imagesaver.php";
        deleteRemoteImage($s_data['memo']);


        2. list_all.php 화일에서...90줄의

        // 글삭제
        mysql_query("delete from $t_board"."_$id where no='$selected[$i]'") or Error(mysql_error());

        의 아랫줄에 아래처럼 넣어줍니다.

        include "imagesaver.php";
        deleteRemoteImage($temp['memo']);




2. 테터툴즈 사용자

    흠~ 테터를 좀더 잘 아시는 분의 지도가 있으면 좋겠군요...

    글작성 및 수정


        1. 새글작성시:
        /테터폴더/blog/owner/entry/add/index.php 화일의 193줄
        $content=mysql_escape_string(filterJavaScript-x-x($entry['content']));

        의 윗줄에...

        2. 수정시:
        /테터폴더/blog/owner/entry/update/item.php 화일의 247줄
        $content=mysql_escape_string(filterJavaScript-x-x($entry['content']));

        의 윗줄에...

        include "imagesaver.php";
        $entry['content'] = saveRemoteImage($entry['content']);

        를 넣어주고나서

        imagesaver.php 의 95줄에있는

        $str = addslashes($str); 를

        //$str = addslashes($str);

        이렇게 주석처리해주세요...



    글 삭제


        /테터폴더/blog/owner/entry/delete/item.php 화일의 225줄
        updateEntriesOfCategory($owner,$target['category']);

        의 아랫줄에...

        include "imagesaver.php";
        deleteRemoteImage($target['content']);

        라고 넣어주시면 됩니다.



3. 그누보드 사용자

    글작성 및 수정


        그누보드/bbs/write_update.php 의 186줄...

        if ($w == "" || $w == "r")
        {
            if ($member[mb_id])
            {

        의 윗줄에 아래 두줄 추가하면 됩니다.

        include "imagesaver.php";
        $wr_content= saveRemoteImage($wr_content);

        if ($w == "" || $w == "r")
        {
            if ($member[mb_id])
            {
        
        요렇게....



    글 삭제


        1. 그누보드/bbs/ 폴더안의 delete.php 에서

        // 게시글 삭제
        sql_query(" delete from $write_table where wr_parent = '$write[wr_id]' ");

        를 찾은뒤 그 윗줄에 다음 3줄을 추가해주시면 됩니다.

        $wrtemp = sql_fetch(" select wr_content as content from $write_table where wr_id = '$write[wr_id]' ");
        include "imagesaver.php";
        deleteRemoteImage($wrtemp['content']);


        2. 그누보드/bbs/ 폴더안의 delete_all.php 에서

        // 사용자 코드 실행
        @include_once("$board_skin_path/delete_all.skin.php"); 를 찾아 그 아래에

        include_once "imagesaver.php";

        를 넣어주세요. 그리고 나서...

        // 게시글 삭제
        sql_query(" delete from $write_table where wr_parent = '$write[wr_id]' ");

        를 찾은뒤 그 윗줄에 다음 2줄을 추가해주시면 됩니다...
.
        $wrtemp = sql_fetch(" select wr_content as content from $write_table where wr_id = '$write[wr_id]' ");
        deleteRemoteImage($wrtemp['content']);



참고.1: 사이트에 접속하고 내용을 읽어오는 기능은 오픈소스의 Snoopy 클래스를 이용하여 구현하였습니다.

참고.2: 제로보드, 테터, 그누보드 이외에 다른곳에 설치하신분들 이곳에서 정보를 나눕시다. ^^

참고.3: 9월9일 이전에 다운받아서 설치하신분들은 새로 받아서 다시 설치하세요.

첨부파일

댓글목록

Simulz님의 댓글

profile_image Simulz
작성일

<p>절대 경로는 직접 입력 보다 대부분 아래 변수로 통일 되용...</p>
<p>$_SERVER['DOCUMENT_ROOT']</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>역시 snoopy 좋군요~&nbsp; 잘 됩니다~!!</p>
<p>&nbsp;</p>
<p>좀더 응용 해서...</p>
<p>&nbsp;</p>
<p>외부 이미지의 수정 날짜를 검사해서 업데이트 됐을 때만 가져올 수 있으면 좋겠어요...</p>

게시물 검색
Copyright © 서방님.kr All rights reserved.
PC 버전으로 보기