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

외부 이미지 저장에 대한 문의 채택완료

오토고고 3년 전 조회 1,920

안녕하세요?

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

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

 

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

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

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

 

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

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

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

답변 3개

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

</p>

<p>$url = '<a href="http://cdn1.domeggook.com/upload/item/2017/07/13/1499927872F5D7BA117104BB1BE9FDB0/1499927872F5D7BA117104BB1BE9FDB0_img_760?hash=ac9384bdfb6e7ecb1226466523d3ce85';" target="_blank" rel="noopener noreferrer">http://cdn1.domeggook.com/upload/item/2017/07/13/1499927872F5D7BA117104BB1BE9FDB0/1499927872F5D7BA117104BB1BE9FDB0_img_760?hash=ac9384bdfb6e7ecb1226466523d3ce85';</a></p>

<p>// 이미지 형식 체크

// <a href="https://www.php.net/manual/en/function.getimagesize.php" target="_blank" rel="noopener noreferrer">https://www.php.net/manual/en/function.getimagesize.php</a>

$gis = @getimagesize($url);</p>

<p>if ($gis != false && is_numeric($gis[2]) == true) {

    // 파일명 얻기

    // <a href="https://www.php.net/manual/en/function.pathinfo" target="_blank" rel="noopener noreferrer">https://www.php.net/manual/en/function.pathinfo</a>

    $path = pathinfo($url);

    $fname = $path['basename'];

    $fname_querypos = strpos($fname, '?');

    if ($fname_querypos !== false) {

        $fname = substr($fname, 0, $fname_querypos);

    }</p>

<p>    // 확장자 얻기

    // <a href="https://www.php.net/manual/en/function.image-type-to-extension.php" target="_blank" rel="noopener noreferrer">https://www.php.net/manual/en/function.image-type-to-extension.php</a>

    $ext = image_type_to_extension($gis[2]);</p>

<p>    // 전체경로 얻기

    $fullpath = __DIR__ . DIRECTORY_SEPARATOR . $fname . '.' . $ext;</p>

<p>    // 다운로드

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_HEADER, false);</p>

<p>    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $data = curl_exec($ch);</p>

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

}

?></p>

<p>

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

답변에 대한 댓글 5개

오토고고
3년 전
감사합니다. 테스트해보고 코멘트 남기겠습니다~
오토고고
3년 전
아무래도 원격저의 이미지를 읽어들이지 못하는것 같습니다.
$gis = @getimagesize($url); 이 부분을 체크 못하는 것 같습니다.
실행하고 나서 바로 wrong image 메시지가 뜨는걸 보면요...
배르만
3년 전
$gis = getimagesize($url);
처럼 해서 오류내용 확인해보세요
오토고고
3년 전
$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
배르만
3년 전
순서를 바꿔서 curl 관련 먼저, 그다음 curl 로 생성된 파일을 getimagesize 호출하는것도 방법일수 있습니다.

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

3년 전

다시한번 해보겠습니다^^

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

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

3년 전

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

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

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

답변에 대한 댓글 1개

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

실제 파일이 다운로드 되는지는
[code]
echo $fullpath;
exit();
if (file_put_contents($fullpath, $data) === false) {
[/code]
형태로 확인해볼수 있습니다.


이부분은 저장 경로를 지정하는 부분이고
[code]
$fullpath = __DIR__ . DIRECTORY_SEPARATOR . $fname . '.' . $ext;
[/code]
이 코드를 포함하는 php 파일이 있는 디렉토리에 저장하도록 되어있습니다.
디버깅해서 적절한 경로로 수정하시면 될것 같습니다.

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

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

로그인