Skip to content

CHICPRO

  • Life Log
  • Cycling Log
  • Photo Log
    • Portrait
    • Landscape
    • Flower
    • Etc
  • Coding Log
  • Information

[PHP] curl을 이용한 원격지 이미지 파일 저장

2015-04-01 by 편리

php의 curl을 이용해서 원격지의 이미지 파일을 로컬 서버에 저장하는 기능을 수행하는 코드이다. curl 사용이 가능한 환경이어야 하며 원격지의 파일은 curl에서 접근이 가능해야 한다. 파일 다운로드 후 getimagesize 함수를 이용해 타입을 실제 파일의 타입을 체크하고 gif, jpg, png 파일이 아니면 삭제하도록 했다. curl에서 파일 체크 후 http code가 200일 때만 실행되도록 했으며 파일의 용량이 크다면 CURLOPT_CONNECTTIMEOUT 설정을 변경해서 다운로드를 할 수도 있다.

<?php
function save_remote_image($url, $dir)
{
    $filename = '';

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_NOBODY, true);

    curl_exec ($ch);

    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if($http_code == 200) {
        $filename = basename($url);
        if(preg_match("/\.(gif|jpg|jpeg|png)$/i", $filename)) {
            $tmpname = date('YmdHis').(microtime(true) * 10000);
            $filepath = $dir;
            @mkdir($filepath, '0755');
            @chmod($filepath, '0755');

            // 파일 다운로드
            $path = $filepath.'/'.$tmpname;
            $fp = fopen ($path, 'w+');

            $ch = curl_init();
            curl_setopt( $ch, CURLOPT_URL, $url );
            curl_setopt( $ch, CURLOPT_RETURNTRANSFER, false );
            curl_setopt( $ch, CURLOPT_BINARYTRANSFER, true );
            curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
            curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 10 );
            curl_setopt( $ch, CURLOPT_FILE, $fp );
            curl_exec( $ch );
            curl_close( $ch );

            fclose( $fp );

            // 다운로드 파일이 이미지인지 체크
            if(is_file($path)) {
                $size = @getimagesize($path);
                if($size[2] < 1 || $size[2] > 3) {
                    @unlink($path);
                    $filename = '';
                } else {
                    $ext = array(1=>'gif', 2=>'jpg', 3=>'png');
                    $filename = $tmpname.'.'.$ext[$size[2]];
                    rename($path, $filepath.'/'.$filename);
                    chmod($filepath.'/'.$filename, '0644');
                }
            }
        }
    }

    return $filename;
}
?>

위 코드는 이미지만 다운로드 하지만 코드를 변경하면 다른 파일도 다운로드 가능하다.

Post navigation

Previous Post:

새벽 4시에 잠이 깬 이유는

Next Post:

[jQuery] 순차적으로 증가하는 Progressbar 구현

One comment

  1. taebu says:
    2016-11-10 at 16:48

    49라인
    chmod($filepath.’/’.$filename, ‘0644’);

    을
    @chmod($filepath.’/’.$filename, intval(“0644”, 8));
    위와 같이 해주세요.

    안그러면 퍼미션 에러 납니다.

    Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Recent Posts

  • php 배열 연산에서 + 와 array_merge 의 차이
  • pcntl_fork 를 이용한 다중 프로세스 실행
  • 아이폰 단축어를 이용하여 주중 공휴일엔 알람 울리지 않게 하기
  • 구글 캘린더 전체일정 재동기화
  • OpenLiteSpeed 웹서버에 HTTP 인증 적용
  • OpenLiteSpeed 웹어드민 도메인 연결
  • WireGuard를 이용한 VPN 환경 구축
  • Ubuntu 22.04 서버에 OpenLiteSpeed 웹서버 세팅
  • 맥 vim 세팅
  • 우분투 시스템 터미널쉘 zsh 로 변경

Recent Comments

  • 편리 on 업무관리용 그누보드 게시판 스킨
  • 임종섭 on 업무관리용 그누보드 게시판 스킨
  • 캐논 5D 펌웨어 | Dslr 펌웨어 업그레이드 방법 82 개의 베스트 답변 on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • Top 5 캐논 5D 펌웨어 Top 89 Best Answers on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • 편리 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 임팀장 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 편리 on Notepad++ NppFTP 플러그인 수동 설치
  • paul-j on Notepad++ NppFTP 플러그인 수동 설치
  • YS on Windows 10 iCloud 사진 저장 폴더 변경
  • 편리 on Docker를 이용한 Centos7 + httpd + php 5.4 개발환경 구축

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
© 2025 CHICPRO | Built using WordPress and SuperbThemes