워드프레스 외부 이미지를 다운로드하기

배경: 블로그의 사진을 살려야 한다

올 초에 Flickr(이하 플리커) 무료 계정의 무제한 사진 보관 기능이 없어졌다. 유료 계정으로 변환하지 않으면 1000장만 남겨놓고 업로드한 사진들을 다 지워버린다고 한다. 이 사진들을 백업하는 건 그리 큰 일이 아니다.

문제는 이 블로그. 이 블로그에 넣은 사진들은 모두 플리커에 이미지를 올려놓고 링크만 넣은 것이기 때문에 플리커에서 사진이 제거 되면 이 블로그의 사진이 모두 사라진다!

내 블로그의 이런 사진들이 모두 플리커에 올라가 있던 거였다.

내 결정은 내 블로그에 들어있는 모든 사진을 플리커로부터 다운로드한 후 호스팅 업체에 옮겨놓는 동시에, 블로그 내부에 있는 플리커 사진 URL을 해당 호스팅 업체 URL로 변경하는 것.

내부 링크된 사진을 다운로드 해주는 워드프레스 플러그인

이 정도는 내가 프로그래밍을 할 수 있을 것 같았는데, 혹시 내가 하고 싶은 일을 해주는 워드프레스 플러그인이 있을까?

있다! 열심히 검색을 해서 찾은 몇 개의 플러그인들. 참고로 나는 현재 워드프레스 5.1 버전을 쓴다.

  • Image Teleporter: 너무 오래돼서인지 제대로 동작안 함
  • Auto-Upload Images: 워드프레스 5와의 호환성 문제인지 되다가 안되다가 하며, 될 때도 사진이 미디어 라이브러리에 자동으로 등록되지는 않음.
  • Download External Images In Posts: 잘 작동하지 않음.
  • External Media Upload : 내가 원하는 기능이 아님. 외부 이미지 URL을 잔뜩 주면 로컬에 저장하고 내부 미디어 라이브러리에 넣어주는 플러그인.
  • External Image Replace: 내가 최종적으로 선택해서 성공적으로 사용한 플러그인

External Image Replace플러그인, 그리고 코드 수정

이 플러그인은 이름대로 외부 이미지를 내부 이미지로 교체해주는 플러그인이다. 플러그 인을 설치하면 워드프레스 알림판 좌측 메뉴의 ‘도구’아래 External Image Replace란 메뉴가 생긴다.

도구-External image replace를 선택하면 위와 같은 화면이 뜸. 현재 외부 이미지를 사용하는 글이 하나 밖에 안 남아 있음을 알 수 있다.

이 메뉴를 선택하면 블로그에서 외부이미지를 사용하는 글들이 주욱 나열되고, 상단의 Replace란 버튼을 누르면 된다. 아마 다음과 같은 일을 하는 것으로 추정된다.

  • 1) 각 글안의 사진(img 태그)을 찾아 외부 호스팅된 사진이면,
  • 2) 외부 호스팅된 사진을 현재 호스팅 서버로 다운로드 한 후
  • 3) 글안의 외부 호스트 사진 URL을 새로운 URL로 교체
  • 4) 새 사진을 워드프레스 미디어 라이브러리에 등록

처음 쓸 때는 잘 안됐다. 사진을 copy하지 못 한다는 에러가 떴다. (명확한 에러메시지를 출력하는 것도 이 플러그인의 우수한 점)

코드를 뜯어보니 사진을 다운로드하기 위해 PHP의 copy()를 썼는데, 이 함수는 allow_url_fopen 권한이 true로 설정돼 있어야 제대로 동작하기 때문. PHP를 잘 모르는 나는 이 권한을 내가 바꿀 수 있는지 잘 모른다. 그래서 스택오버플러우를 참고하여 플러그인 class.php 코드에서 copy() 함수 부분을 수정.

/*         $flag = copy($parse_url, $uploaddir_img);   제거 */

$ch = curl_init($parse_url);
$fp = fopen($uploaddir_img, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
$flag = curl_exec($ch);
curl_close($ch);
fclose($fp);

이렇게 하면 제대로 작동하더라. 다만 대량의 글을 한꺼번에 선택하여 작업하면 서버에 부하가 몰려서 호스팅 업체에서 웹데몬을 죽여버리는(?) 경우가 있는 것 같은데 이건 호스팅 업체마다 다를 것 같다. 한 번에 글 20개씩 정도를 선택하여 작업했더니 큰 문제가 없었다.

그래서 현재 이 블로그의 모든 사진은 이 호스트로 옮겨졌다. 미션 썩세스!

PS:

플리커는 훌륭한 사이트다. 사진들을 플리커에 올려놓고 서빙한 덕분에 수년간 1년에 만원 밖에 안 하는 500M짜리 계정으로 홈페이지를 운영할 수 있었다.

다만 한국에서는 사진 브라우징하기가 너무너무 느리다. 브라우징 속도만 빨랐어도 유료로 플리커를 계속 이용했을 것이다. 이미지 호스팅 (CDN) 용도로는 매우 훌륭하며 사진 로딩 속도도 빠른 편이다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중