외부 이미지 저장에 대한 문의 채택완료
오토고고
3년 전
조회 1,920
안녕하세요?
외부 이미지의 절대경로를 가지고 홈페이지에 이미지로 저장하는 프로그램을 만들어 보려고 합니다.
그런데 시작하자마다 2가지가 막히네요. ;;
1. 이미지가 원격지에 있습니다.
2. 이미지의 확장자가 없습니다. (확장자는 jpg 인데 확장자를 제거한거 같습니다)
아래 경로가 이미지 경로의 샘플입니다.
고수님들 의견 부탁드려요~
댓글을 작성하려면 로그인이 필요합니다.
답변 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 메시지가 뜨는걸 보면요...
$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
$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년 전
알려주신 소스코드로 업로드해서 테스트해봤는데 저장이 안되네요. ㅠ
구누보드 사용시 data 폴더에 저장하려고 하는데 어떤 부분이 잘못건까요?
로그인 후 평가할 수 있습니다
답변에 대한 댓글 1개
�
배르만
3년 전
저장이 안되는 권한관련 에러가 발생한게 아닐까 생각합니다.
권한관련해서는 따로 검색해보시면 될것 같고
실제 파일이 다운로드 되는지는
[code]
echo $fullpath;
exit();
if (file_put_contents($fullpath, $data) === false) {
[/code]
형태로 확인해볼수 있습니다.
이부분은 저장 경로를 지정하는 부분이고
[code]
$fullpath = __DIR__ . DIRECTORY_SEPARATOR . $fname . '.' . $ext;
[/code]
이 코드를 포함하는 php 파일이 있는 디렉토리에 저장하도록 되어있습니다.
디버깅해서 적절한 경로로 수정하시면 될것 같습니다.
권한관련해서는 따로 검색해보시면 될것 같고
실제 파일이 다운로드 되는지는
[code]
echo $fullpath;
exit();
if (file_put_contents($fullpath, $data) === false) {
[/code]
형태로 확인해볼수 있습니다.
이부분은 저장 경로를 지정하는 부분이고
[code]
$fullpath = __DIR__ . DIRECTORY_SEPARATOR . $fname . '.' . $ext;
[/code]
이 코드를 포함하는 php 파일이 있는 디렉토리에 저장하도록 되어있습니다.
디버깅해서 적절한 경로로 수정하시면 될것 같습니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인