PHP

[PHP] 외부서버의 파일 가져오기

은둔한량 2023. 8. 17. 15:34
반응형

 외부 서버의 파일을 가져오려면 우선 php.ini에서 "allow_url_fopen"이 "on" 되어 있어야 한다.

아니면 힘든 과정을 거쳐야 한다.

 

1. copy 함수 이용

$url = "http://t1.daumcdn.net/daumtop_chanel/op/20200723055344399.png";
$file_name = basename($url);
copy($url, "./upload/".$file_name);

 

2. file_get_contents, file_put_contents 함수 이용

$url = "http://t1.daumcdn.net/daumtop_chanel/op/20200723055344399.png";
$file_name = basename($url);

$file = file_get_contents($url);
file_put_contents("./upload/".$file_name,$file);

 

3. file_get_contents, fwrite 함수 사용

$url = "http://t1.daumcdn.net/daumtop_chanel/op/20200723055344399.png";
$file_name = basename($url);

$fp = fopen("./upload/".$file_name, "w");
fwrite($fp, $file);
fclose($fp);

 

4. fopen, fwrite 함수 사용

$url = "http://t1.daumcdn.net/daumtop_chanel/op/20200723055344399.png";
$file_name = basename($url);

$rf = fopen($url, "r");
$fp = fopen("./upload/".$file_name, "w");

while(!feof($rf)) {
    fwrite($fp, fread($rf, 1), 1);
}

fclose($rf);
fclose($fp);

 만약에 Message: Maximum execution time of 30 seconds exceeded 이런 에러가 나면 

php.ini 에서 max_excution_time = 30 을 늘려주시거나

소스상에서

ini_set('max_execution_time', 300);
set_time_limit(0);

둘중 하나를 넣어주면 됩니다.

 

5. curl을 이용한 방법

$url = "http://t1.daumcdn.net/daumtop_chanel/op/20200723055344399.png";
$file_name = basename($url);

$fp = fopen("./upload/".$file_name, "w");

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
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);

 

Call to undefined function curl_init()

이런 에러가 날 경우에는 curl 을 설치하면 됩니다.

 

 

반응형