본문 바로가기
노코드 No Code

[PHP] 외부 이미지 서버에 저장

by 웹디자인 2022. 10. 8.

페이지 링크 서비스 제작 및 기타 페이지 공유 서비스 제작시

ogg tag와 함께 이미지도 함께 가져와야 할 때가 있습니다.

단순히 해당 페이지의 오리지널 이미지 링크를 저장하는 방법도 있지만, 아무래도 이미지는 자체 서버에 저장을 해 놓아야 이미지 삭제나 변경시 별도 대처가 없어도 되겠지요.

 

이번 시간엔 다른 주소에 있는 이미지를 서버에 저장시 필요한 코드 구성입니다.

$imgLink = "https://test.com/page/image.jpg";

// 파일명 가져오기
$linkArray = explode("/", $imgLink);
$filename = $linkArray[count($linkArray)-1];

// 확장자명 가져오기
//$ext = strtolower(pathinfo($imgLink, PATHINFO_EXTENSION));	// jpg

// 저장할 이미지 위치 및 파일명
$fp = fopen("./upload/".$filename,'w');

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $imgLink);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);

// 가져올 외부이미지 주소
fwrite($fp,$contents);
fclose($fp);

echo '<img src="/upload/'.$filename.'">';

 

위 코드는 가져오는 이미지를 원래이름 그대로 저장할때 사용이 됩니다.

하지만 여기서 문제가 발생할 수 있는데요, 바로 이미지는 다른데 이름이 같은 경우가 있습니다.

이렇 경우를 대비해서 저장할때 랜덤함수를 이용하여 서버로 저장되는 이미지의 파일명 중복을 방지하는 것입니다.

 

자 다음 코드는 위 코드를 기반으로 이미지의 임시이름을 생성하여 적용, 저장합니다.

 


// 파일명 가져오기
$linkArray = explode("/", $imgLink);
$filename = $linkArray[count($linkArray)-1];


// 확장자명 가져오기
$ext = strtolower(pathinfo($imgLink, PATHINFO_EXTENSION));	// jpg

// 임시이름 (현재시간_랜덤수.확장자) - 파일명 중복을 대비 임시이름을 덧붙여 저장
$tmp_filename = time() . '_' . mt_rand(0,99999) . '.' . strtolower($ext);

// 저장할 이미지 위치 및 파일명
$fp = fopen("./upload/".$tmp_filename,'w');

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $imgLink);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);

// 가져올 외부이미지 주소
fwrite($fp,$contents);
fclose($fp);

echo '<img src="/upload/'.$tmp_filename.'">';

 

 

 

댓글