PHP代码实现远程下载文件到本地的函数
经常写采集器发布接口需要使用到远程附件的功能,所以自己写了一个PHP远程下载文件到本地的函数,一般情况下已经够用了,如果服务器支持CURL函数,程序则会优先选择CURL,因为测试结果表明CURL的响应时间及资源占用率比file_get_contents小得多;如果大家有好的建议及改进方案,欢迎留言给我哦!(非原创,这个是原地址http://www.cr173.com/html/14896_1.html)
<?php
/*
mkdir() 函数创建目录。
若成功,则返回 true,否则返回 false。
mkdir() 尝试新建一个由 path指定的目录。
默认的 mode是 0777,意味着最大可能的访问权。
*/
echo httpcopy("http://www.baidu.com/img/baidu_sylogo1.gif");
function httpcopy($url, $file="", $timeout=60) {
//如果文件名为空,使用pathinfo()方法返回文件名
$file = empty($file) ? pathinfo($url,PATHINFO_BASENAME) : $file;
//取得文件路径
$dir = pathinfo($file,PATHINFO_DIRNAME);
!is_dir($dir) && @mkdir($dir,0777,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;
}
}
}
?>
posted on 2013-01-28 13:57 hellofking 阅读(229) 评论(0) 编辑 收藏 举报