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

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

QA

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

본문

안녕하세요?

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

그런데 시작하자마다 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 파일이 있는 디렉토리에 저장하도록 되어있습니다.
디버깅해서 적절한 경로로 수정하시면 될것 같습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 0 | RSS
QA 내용 검색
  • 개별 목록 구성 제목 답변작성자조회작성일
  • 질문이 없습니다.

회원로그인

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