외부 이미지 저장에 대한 문의

외부 이미지 저장에 대한 문의

QA

외부 이미지 저장에 대한 문의

답변 3

본문

안녕하세요?

외부 이미지의 절대경로를 가지고 홈페이지에 이미지로 저장하는 프로그램을 만들어 보려고 합니다.

그런데 시작하자마다 2가지가 막히네요. ;;

 

1. 이미지가 원격지에 있습니다.

2. 이미지의 확장자가 없습니다. (확장자는 jpg 인데 확장자를 제거한거 같습니다)

아래 경로가 이미지 경로의 샘플입니다.

 

http://cdn1.domeggook.com/upload/item/2017/07/13/1499927872F5D7BA117104BB1BE9FDB0/1499927872F5D7BA117104BB1BE9FDB0_img_760?hash=ac9384bdfb6e7ecb1226466523d3ce85
 

고수님들 의견 부탁드려요~

이 질문에 댓글 쓰기 :

답변 3


$url = 'http://cdn1.domeggook.com/upload/item/2017/07/13/1499927872F5D7BA117104BB1BE9FDB0/1499927872F5D7BA117104BB1BE9FDB0_img_760?hash=ac9384bdfb6e7ecb1226466523d3ce85';
// 이미지 형식 체크
// https://www.php.net/manual/en/function.getimagesize.php
$gis = @getimagesize($url);
if ($gis != false && is_numeric($gis[2]) == true) {
    // 파일명 얻기
    // https://www.php.net/manual/en/function.pathinfo
    $path = pathinfo($url);
    $fname = $path['basename'];
    $fname_querypos = strpos($fname, '?');
    if ($fname_querypos !== false) {
        $fname = substr($fname, 0, $fname_querypos);
    }
    // 확장자 얻기
    // https://www.php.net/manual/en/function.image-type-to-extension.php
    $ext = image_type_to_extension($gis[2]);
    // 전체경로 얻기
    $fullpath = __DIR__ . DIRECTORY_SEPARATOR . $fname . '.' . $ext;
    // 다운로드
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);
    if ($data == false || curl_errno($ch) > 0) {
        echo curl_errno($ch) . ': ' . curl_error($ch);
    } else {
        if (file_put_contents($fullpath, $data) === false) {
            echo 'error occurred';
        }
    }
    curl_close($ch);
} else {
    echo 'wrong image';
}
?>

아무래도 원격저의 이미지를 읽어들이지 못하는것 같습니다.
$gis = @getimagesize($url); 이 부분을 체크 못하는 것 같습니다.
실행하고 나서 바로 wrong image 메시지가 뜨는걸 보면요...

$filepath = 'http://cdn1.domeggook.com/upload/item/2017/07/13/1499927872F5D7BA117104BB1BE9FDB0/1499927872F5D7BA117104BB1BE9FDB0_img_760?hash=ac9384bdfb6e7ecb1226466523d3ce85';

$gis = getimagesize($filepath);

exit;

이렇게 테스트해봤더니 아래와 같은 에러가 나타납니다. 아무래도 불가능할거 같죠?^^

Warning: getimagesize(): http:// wrapper is disabled in the server configuration by allow_url_fopen=0 in /home1/gairam/public_html/test.php on line 8

Warning: getimagesize(http://cdn1.domeggook.com/upload/item/2017/07/13/1499927872F5D7BA117104BB1BE9FDB0/1499927872F5D7BA117104BB1BE9FDB0_img_760?hash=ac9384bdfb6e7ecb1226466523d3ce85): failed to open stream: no suitable wrapper could be found in /home1/gairam/public_html/test.php on line 8

알려주신 소스코드로 업로드해서 테스트해봤는데 저장이 안되네요. ㅠ

구누보드 사용시 data 폴더에 저장하려고 하는데 어떤 부분이 잘못건까요?

저장이 안되는 권한관련 에러가 발생한게 아닐까 생각합니다.
권한관련해서는 따로 검색해보시면 될것 같고

실제 파일이 다운로드 되는지는


echo $fullpath;
exit();
if (file_put_contents($fullpath, $data) === false) {

형태로 확인해볼수 있습니다.


이부분은 저장 경로를 지정하는 부분이고

$fullpath = __DIR__ . DIRECTORY_SEPARATOR . $fname . '.' . $ext;

이 코드를 포함하는 php 파일이 있는 디렉토리에 저장하도록 되어있습니다.
디버깅해서 적절한 경로로 수정하시면 될것 같습니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 59,847
© SIRSOFT
현재 페이지 제일 처음으로