url 이미지 저장문제 채택완료
유튜브 채널에서 이미지를 가져오려고 크롤링을 해보면 이미지 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개
막아놓고 그런건 없는 것 같습니다.
아래 url에서 파싱 테스트 해보세요.
http://dev.e-naver.com/content/parsing_test.php?
참고로 깨지는 문자들은 이미지라서 그렇습니다.
파싱하시는 소스에서 $data를 한번 출력 해보세요.
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 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개
이미지 URL 을 여기 소스에서 가져오고 있는데, 보시다시피 URL에 파일명이 드러나 있지 않습니다.
올려주신 소스로 해도, 확장자 있는 이미지 파일이 저장될것으로 보이지 않습니다만...
저거 크롤링 하시던지 뚫고 들어가야 하실듯..싶은데 쉽지는 않아보이네요.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
위 주소를 주소창에 올리면 해당 이미지가 보이고 여기서 마우스 우클릭해서 저장하면 저장은 됩니다. 보안상 막아놓은거 같지는 않습니다만.. 어떻게 확인해야될지 잘 모르겠네요ㅠ