您的位置:首页 > 编程语言 > PHP开发

PHP代码实现远程下载文件到本地的函数

2013-01-28 13:57 791 查看
经常写采集器发布接口需要使用到远程附件的功能,所以自己写了一个PHP远程下载文件到本地的函数,一般情况下已经够用了,如果服务器支持CURL函数,程序则会优先选择CURL,因为测试结果表明CURL的响应时间及资源占用率比file_get_contents小得多;如果大家有好的建议及改进方案,欢迎留言给我哦!(非原创,这个是原地址http://www.cr173.com/html/14896_1.html)

<?php

/*

pathinfo -- 返回文件路径的信息array pathinfo ( string path [, int options] )pathinfo() 返回一个关联数组包含有 path 的信息。包括以下的数组单元:dirname,basename 和 extension。 可以通过参数 options 指定要返回哪些单元。它们包括:PATHINFO_DIRNAME,PATHINFO_BASENAME 和 PATHINFO_EXTENSION。默认是返回全部的单元。 例子 1. pathinfo() 例子<?php$path_parts = pathinfo("/www/htdocs/index.html");echo $path_parts["dirname"] . "\n";echo $path_parts["basename"] . "\n";echo $path_parts["extension"] . "\n";?> 上例将输出:/www/htdocsindex.htmlhtml 定义和用法mkdir() 函数创建目录。

若成功,则返回 true,否则返回 false。

语法mkdir(path,mode,recursive,context)参数描述path必需。规定要创建的目录的名称。mode必需。规定权限。默认是 0777。recursive必需。规定是否设置递归模式。context必需。规定文件句柄的环境。Context 是可修改流的行为的一套选项。说明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;
}
}
}
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: