* PHP를 통해서 원격에 있는 이미지를 긁어오거나 복사하고 싶을 때가 많은데 예외상황이 많을 것이다. 한번 예외상황들에 대해서 적어보고, 특히 php.ini를 마음대로 수정못하는 웹호스팅을 하고 있다면 꽤나 골치 아플 일이 많을 것이다.
: 일단 첫번째로 확인해야될 제약사항은 php.ini에서 "allow_url_fopen"이 "on" 되어있어야한다는 것이다. 만약 이것이 on 되어있다면 원격의 파일을 꽤나 쉽게 가져올 수 있다.
* copy 함수를 이용해서 원격 이미지 가져오기
: 우선 가장 간단하게 가져올 수 있는 방법은 copy 함수를 쓰는 것이다.
copy("http://remotedomain.com/image.jpg", "/tmp/local.jpg");
: 위와 같이 하면 바로 원격의 파일을 로컬로 복사해서 가져올 수 있다.
* file_get_contents, file_put_contents 함수를 이용하는 방법
: 위보다 조금은 복잡하게, 그러나 파일의 내용을 수정하고 싶거나 전체 흐름을 조율하고 싶다면 아래와 같이 할수도 있다.
$img = file_get_contents("http://remotedomain.com/image.jpg");
$save = file_put_contents("/tmp/local.jpg");
: 아니면 fwrite를 쓸수도 있다.
$img = file_get_contents("http://remotedomain.com/image.jpg");
$fp = fopen("/tmp/local.jpg", "w");
fwrite($fp, $img);
fclose($fp)
: fopen을 쓰고 싶다면 다소 복잡해지지만 가능은 하다. 물론 위의 allow_url_fopen이 설정되어있다면 가능한 것이다.
$rf = fopen($url, "r");
$fp = fopen("/tmp/local.jpg", "w");
while(!feof($rf)) {
fwrite($fp, fread($rf, 1), 1);
}
fclose($rf);
fclose($fp);
: 아무튼 php.ini에서 "allow_url_fopen"이 설정되어있는 경우는 쉽게 되지만, 안되어있는 경우에는 별도로 curl을 사용해서 가져와야한다. 위의 방법들을 사용하고 싶다면 php.ini에 allow_url_fopen=on으로 설정하거나, 아파치 등 웹서버 설정에서 overwrite할 수 있다면, .htaccess에서 php_value allow_url_fopen on 등으로 설정하면 된다. (PHP 4.3.4 이상 버전 호환)
* curl을 이용하는 방법
: 웹서버의 제약이나 php의 제약으로 인하여 위의 allow_url_fopen을 설정할 수 없다면, 원격의 url에 fopen을 사용하지 못하면 직접 접속해서 가져와야할 것이다. 가장 쉽게는 curl을 사용하면 된다.
$fp = fopen("/tmp/loca.jpg", "w");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://remotedomain.com/image.jpg");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
fclose($fp);
curl_close($ch);
: 이외에서 http모듈을 사용하는 방법도 있지만, 아무리 막혀있어도 curl에서는 해결이 될 것이므로 이정도면 원격 URL의 파일을 가져오는데에는 성공할것이라 생각한다.
원격 URL의 파일을 로컬로 가져오기 끝.
좋아요12
공유하기
글 요소
이 글을 공유하세요.
출처: https://unikys.tistory.com/345 [All-round programmer]
'study' 카테고리의 다른 글
[2019.04.24] 실시간 통신 API - webSocket (0) | 2021.12.30 |
---|---|
[PHP] curl을 이용한 원격지 이미지 파일 저장 (0) | 2021.12.30 |
PHP HTML 파싱 예제 (0) | 2021.12.30 |
git 명령어 간단 정리 (0) | 2021.12.30 |
일련의 부모 - 자식 관계를 계층 트리로 변환 하시겠습니까? (0) | 2021.12.30 |