url 이미지 저장문제

url 이미지 저장문제

QA

url 이미지 저장문제

본문

https://yt3.googleusercontent.com/A7aNKwmFnBAYNek2nYfM4EzUWjw9gl0uwUUtEiOxezGMIYQ-k_hHrI0TvidaIIDdQSwu7MQc=s900-c-k-c0x00ffffff-no-rj

 

유튜브 채널에서 이미지를 가져오려고 크롤링을 해보면 이미지 url 이 위와 같이 나옵니다. 

이걸 아래의 코드로 저장하면 파일 크기가 0인 파일이 나옵니다. 

아마도 해당 주소로 바로 불러와서 사용해서 그런거 같은데요, 

위 주소로 조회시 나오는 이미지를 파일로 불러들여 서버에 바로 저장할수 있는 방법이

없을까요??

 


function save_remote_image($url2, $save_path)
{
    $ch = curl_init ($url2);
    curl_setopt($ch, CURLOPT_HEADER, 0); // required
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); // required for images
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // maybe redirect on other side?
    curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3'); // or user agent checks?
    $data=curl_exec($ch);
    curl_close ($ch);
    $chars_array = array_merge(range(0,9), range('a','z'), range('A','Z'));
    //아래의 문자열이 들어간 파일은 -x 를 붙여서 웹경로를 알더라도 실행을 하지 못하도록 함
    $filename = preg_replace("/\.(php|phtm|htm|cgi|pl|exe|jsp|asp|inc)/i", "$0-x", basename($url2));
    shuffle($chars_array);
    $shuffle = implode("", $chars_array);
    //첨부파일 첨부시 첨부파일명에 공백이 포함되어 있으면 일부 PC에서 보이지 않거나 다운로드 되지 않는 현상이 있습니다. (길상여의 님 090925)
    $change_filename = abs(ip2long($_SERVER[REMOTE_ADDR])).'_'.substr($shuffle,0,8).'_'.str_replace('%', '', urlencode(str_replace(' ', '_', $filename)));
    $out_path = $save_path.$change_filename;
    if(file_exists($out_path)) @unlink($out_path);
    $fp = fopen($out_path,'x');
    fwrite($fp, $data);
    fclose($fp);
    return $change_filename;
}
 
 
$url2 = '
https://yt3.googleusercontent.com/A7aNKwmFnBAYNek2nYfM4EzUWjw9gl0uwUUtEiOxezGMIYQ-k_hHrI0TvidaIIDdQSwu7MQc=s900-c-k-c0x00ffffff-no-rj';
$save_path = G5_DATA_PATH.'/file/'.$bo_table.'/';
$remote_image = G5_URL.'/data/file/'.$bo_table.'/'.save_remote_image($url2, $save_path);
 

이 질문에 댓글 쓰기 :

답변 4

막아놓고 그런건 없는 것 같습니다.

아래 url에서 파싱 테스트 해보세요.

http://dev.e-naver.com/content/parsing_test.php?

참고로 깨지는 문자들은 이미지라서 그렇습니다.

파싱하시는 소스에서 $data를 한번 출력 해보세요.

$imgLink = "www.원하는 이미지 URI.com";  // 다운받을  URI

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


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


$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.'">';

가 보통이죠

<meta property="og:title" content=" 방주지기"><link rel="image_src" href="https://yt3.googleusercontent.com/J_xa0elQsM3jep9wxa0YFU_UK29Bdq5lD0q3o7tIeH9LQJjQ9oUWK30sxxxhcIKB-IEw9cTZ=s900-c-k-c0x00ffffff-no-rj">

이미지 URL 을 여기 소스에서 가져오고 있는데, 보시다시피 URL에 파일명이 드러나 있지 않습니다.
올려주신 소스로 해도, 확장자 있는 이미지 파일이 저장될것으로 보이지 않습니다만...

보안상 이미지 가져가는걸 막아서 그럴수도 있으니 확인해 보셔야 할듯 합니다.

https://yt3.googleusercontent.com/J_xa0elQsM3jep9wxa0YFU_UK29Bdq5lD0q3o7tIeH9LQJjQ9oUWK30sxxxhcIKB-IEw9cTZ=s900-c-k-c0x00ffffff-no-rj 

위 주소를 주소창에 올리면 해당 이미지가 보이고 여기서 마우스 우클릭해서 저장하면 저장은 됩니다. 보안상 막아놓은거 같지는 않습니다만.. 어떻게 확인해야될지 잘 모르겠네요ㅠ

답변을 작성하시기 전에 로그인 해주세요.
전체 3
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT