본문으로 바로가기
[ 상황 ]

이미지 파일을 xml로 파싱해서 다른 사이트에서 가져왔지만
proxy설정을 해놨기때문에 다른 사이트에서 가져온 이미지 파일을 보여줄때 보안상 막혀있는 사이트이므로 바로 img파일 url을 적용할 수 없음.

따라서, 다른 사이트에서 가져온 이미지파일의 url을 가지고
내 사이트에 저장한 후 다시 가져오도록 수정.

[ TODO ]

1. 88240.tistory.com/img 에서 가져온 이미지 cache/upload에 저장 

2. 저장시 cache에 이미 저장되어있는지 확인
   1) 저장되있을 경우 : 파일 저장된 날짜 확인
       1-1) 파일 날짜 일주일 지났으면 덮어쓰기
       1-2) 파일 날짜 일주일 안지났으면 keep
   2) 저장 안되있을 시 : 저장
3. cache/upload에서 이미지 파일 불러와 출력되도록 수정


//파일 가져와 저장하는 함수
function get_saveFile($url) {

    $imgName_arry = explode("/", $url);
    $imgName = $imgName_arry[sizeof($imgName_arry) - 1]; //파일명 가져옴

    $cachePath = "../cache/upload/"; //업로드 위치
    $Path = $cachePath.$imgName;

        //파일이 있는지 확인
        if(file_exists($Path)) {  
            //cache에 파일이 있음
            $imgSaveTime = filemtime($Path); //파일 저장된 날짜
            $imgCheckTime = $imgSaveTime + ( 60 * 60 * 24 * 7 ); //파일이 저장된 날짜의 일주일 날짜 계산
            $now = time(); //현재 시간

            if($imgCheckTime <= $now) { //파일 저장된 날짜보다 현재날짜가 더 최근일 경우
                $img = file_get_contents($url); //파일을 가져옴
                file_put_contents($Path, $img); //덮어쓰기(저장)
            }
        } else { 
            //cache에 파일이 없음
            $img = file_get_contents($url); //파일을 가져옴
            file_put_contents($Path, $img); //저장
        }
   return $Path; //파일이 cache에 있으면 불러옴
}

$imgUrl = get_saveFile('http://testpage.com/img/imgfile.png');
echo "img src="".$imgUrl."""; //img src="http://88240.tistory.com/cache/upload/imgfile.png"


file_get_contents : 파일의 정보를 가져온다. 가져올 파일의 전체 URL을 파라미터로 입력

file_put_contents : 파일을 저장. 저장시 저장하는 경로 + 파일명 + 파일확장자 모두 입력($Path)

                               저장할 파일입력($img)

filemtime : 파일을 저장한 날짜를 가져온다. 유닉스 시간으로 가져온다. 


* 유닉스 시간 : 1970년 1월 1일 0시 0분 0초를 기준으로 계산. 단위는 초이다.

따라서 $imgSaveTime + ( 60 * 60 * 24 * 7 ) 이와 같이 한이유는

filemtime으로 가져온 유닉스 시간에 60초 * 60분 * 24시간 * 7일(일주일)로 함으로써

일주일 뒤를 계산할 수 있다..