PHP实现远程下载文件到本地
经常写采集器发布接口需要使用到远程附件的功能,所以自己写了一个PHP远程下载文件到本地的函数,一般情况下已经够用了,如果服务器支持CURL函数,程序则会优先选择CURL,有需要的小伙伴可以参考下。
代码很简单就不多废话了,直接奉上:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<?php function httpcopy( $url , $file = "" , $timeout =60) {
$file = empty ( $file ) ? pathinfo ( $url ,PATHINFO_BASENAME) : $file ;
$dir = pathinfo ( $file ,PATHINFO_DIRNAME);
! is_dir ( $dir ) && @ mkdir ( $dir ,0755,true);
$url = str_replace ( " " , "%20" , $url );
if (function_exists( 'curl_init' )) {
$ch = curl_init();
curl_setopt( $ch , CURLOPT_URL, $url );
curl_setopt( $ch , CURLOPT_TIMEOUT, $timeout );
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, TRUE);
$temp = curl_exec( $ch );
if (@ file_put_contents ( $file , $temp ) && !curl_error( $ch )) {
return $file ;
} else {
return false;
}
} else {
$opts = array (
"http" => array (
"method" => "GET" ,
"header" => "" ,
"timeout" => $timeout )
);
$context = stream_context_create( $opts );
if (@ copy ( $url , $file , $context )) {
//$http_response_header
return $file ;
} else {
return false;
}
}
} ?> |
再来个远程下载文件到服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
< form method = "post" >
< input name = "url" size = "50" />
< input name = "submit" type = "submit" />
</ form >
< ? php
// maximum execution time in seconds set_time_limit (24 * 60 * 60); if (!isset($_POST['submit'])) die(); // folder to save downloaded files to. must end with slash $ destination_folder = 'temp/' ;
$url = $_POST['url']; $newfname = $destination_folder . basename($url); $ file = fopen ($url, "rb");
if ($file) { $ newf = fopen ($newfname, "wb");
if ($newf) while(!feof($file)) { fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 ); } } if ($file) { fclose($file); } if ($newf) { fclose($newf); } ?> |
以上所述就是本文的全部内容了,希望大家能够喜欢。