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;
}
}
}
?>
<?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;
}
}
}
?>
相关文章推荐
- PHP代码实现远程下载文件到本地的函数
- PHP代码实现远程下载文件到本地的函数
- PHP代码实现远程下载文件到本地的函数
- PHP实现远程下载文件到本地
- php实现下载远程文件的代码
- PHP实现远程下载文件到本地
- PHP实现远程下载文件到本地
- PHP实现的一个保存远程文件到本地的函数分享
- PHP实现远程下载文件到本地
- php header函数下载文件实现代码
- php下载远程文件代码(curl ,支持重定向)
- php实现当前页面点击下载文件的实例代码
- php文件下载(可限制下载速度)实现代码
- 使用PHP下载CSS文件中的所有图片【几行代码即可实现】
- PHP用代码实现文件下载
- PHP实现从远程下载文件的方法
- php实现远程网络文件下载到服务器指定目录(方法二)
- PHP自定义函数: 下载远程文件
- PHP通过header实现文本文件下载的代码
- PHP下载远程文件到本地存储的方法