외부 이미지를 서버에 저장 하는 방법에 대한 질문입니다.
본문
외부 이미지를 가져와서 쓰는 게시물이 조금 많은데요
img 태그로 그냥 이미지를 스마트 웹 에디터를 이용해서 올려 놓은 이미지 인데
이걸 새로 글을 작성 할때나 혹은 이미 태그가 걸려 있는 게시물들을 기준으로 해서
서버에 저장 할 수 있는 방법은 없을까요?
상대 서버에서는 외부 이미지 저장 을 막아 놓은거 같기는 합니다..
좋은 방법이 없을까요?
답변 2
안녕하세요.
아래의 방법을 참고해 보시겠어요..
1. 외부 이미지 다운로드하여 서버에 저장 샘플
<?php
function save_external_image($image_url, $save_path) {
// 이미지 파일을 다운로드
$ch = curl_init($image_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$image_data = curl_exec($ch);
curl_close($ch);
// 이미지 데이터를 서버에 저장
file_put_contents($save_path, $image_data);
}
// 사용 예시
$image_url = 'http://example.com/image.jpg';
$save_path = 'path/to/save/image.jpg';
save_external_image($image_url, $save_path);
?>
2. 게시물 내용에서 외부 이미지 URL을 찾아 서버에 저장 후 경로 수정 샘플
<?php
function save_images_and_replace_content($content) {
// 이미지 URL을 추출하기 위한 정규식
$pattern = '/<img[^>]+src=["\'](http[^"\']+)["\'][^>]*>/i';
preg_match_all($pattern, $content, $matches);
foreach ($matches[1] as $image_url) {
// 이미지 파일명을 추출
$image_name = basename($image_url);
$save_path = 'path/to/save/' . $image_name;
// 이미지를 서버에 저장
save_external_image($image_url, $save_path);
// 기존 이미지 URL을 서버 경로로 변경
$server_image_url = '/path/to/save/' . $image_name;
$content = str_replace($image_url, $server_image_url, $content);
}
return $content;
}
// 게시물 저장 시 사용 예시
$content = '<p><img src="http://example.com/image.jpg" alt="Example Image"></p>';
$new_content = save_images_and_replace_content($content);
echo $new_content;
?>
3. 기존 게시물 일괄처리 샘플
<?php
include_once('common.php');
// 모든 게시물을 처리
$result = sql_query("SELECT wr_id, wr_content FROM g5_write_board");
while ($row = sql_fetch_array($result)) {
$wr_id = $row['wr_id'];
$wr_content = $row['wr_content'];
// 외부 이미지를 서버에 저장하고 경로를 수정
$new_content = save_images_and_replace_content($wr_content);
// 수정된 내용을 데이터베이스에 업데이트
sql_query("UPDATE g5_write_board SET wr_content = '".addslashes($new_content)."' WHERE wr_id = $wr_id");
}
?>