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);
}
?>
|
以上所述就是本文的全部内容了,希望大家能够喜欢。