* 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)
$rf = fopen($url, "r");
$fp = fopen("/tmp/local.jpg", "w");
while(!feof($rf)) {
fwrite($fp, fread($rf, 1), 1);
}
fclose($rf);
fclose($fp);
$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의 파일을 로컬로 가져오기 끝.
출처: https://unikys.tistory.com/345 [All-round programmer:티스토리]
'프로그래밍 Tip > PHP' 카테고리의 다른 글
[PHP] 특정일의 주차 구하기 (0) | 2021.03.17 |
---|---|
[PHP] 주간 날짜 구하기, 이전주, 다음주 (0) | 2021.03.17 |
[PHP] Fatal error: Allowed memory size of 134217728 bytes exhausted (0) | 2017.09.25 |
[PHP] ZipArchive 클래스 모듈 설치하기 (0) | 2017.09.21 |
[PHP] php 로 웹페이지 긁어오기 모든 방법 총정리! (0) | 2017.08.23 |