테스트 사이트 - 개발 중인 베타 버전입니다

url 이미지 저장문제 채택완료

꼴랑2 1년 전 조회 4,454

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

 

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

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

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

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

없을까요??

 

</p>

<p>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);</p>

<p>    $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;

}</p>

<p> </p>

<p> </p>

<p>$url2 = '</p>

<p><a href="https://yt3.googleusercontent.com/A7aNKwmFnBAYNek2nYfM4EzUWjw9gl0uwUUtEiOxezGMIYQ-k_hHrI0TvidaIIDdQSwu7MQc=s900-c-k-c0x00ffffff-no-rj';" target="_blank" rel="noopener noreferrer">https://yt3.googleusercontent.com/A7aNKwmFnBAYNek2nYfM4EzUWjw9gl0uwUUtEiOxezGMIYQ-k_hHrI0TvidaIIDdQSwu7MQc=s900-c-k-c0x00ffffff-no-rj';</a>

$save_path = G5_DATA_PATH.'/file/'.$bo_table.'/';

$remote_image = G5_URL.'/data/file/'.$bo_table.'/'.save_remote_image($url2, $save_path);</p>

<p> </p>

<p>

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

채택된 답변
+20 포인트
d
1년 전

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

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

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

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

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

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

1년 전

잘 됩니다. 정말 감사합니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

플라이
1년 전

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

꼴랑2
1년 전
https://yt3.googleusercontent.com/J_xa0elQsM3jep9wxa0YFU_UK29Bdq5lD0q3o7tIeH9LQJjQ9oUWK30sxxxhcIKB-IEw9cTZ=s900-c-k-c0x00ffffff-no-rj

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

댓글을 작성하려면 로그인이 필요합니다.

toqurk
1년 전

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

가 보통이죠

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

꼴랑2
1년 전
<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에 파일명이 드러나 있지 않습니다.
올려주신 소스로 해도, 확장자 있는 이미지 파일이 저장될것으로 보이지 않습니다만...
t
toqurk
1년 전
보안으로 2중3중으로 겹겹히 싸놨네요...
저거 크롤링 하시던지 뚫고 들어가야 하실듯..싶은데 쉽지는 않아보이네요.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인