上一篇文章我们介绍Python保留原路径下载, 这一篇文章我们来介绍一下使用php, 如何保留原路径进行下载远程文件。
我们使用parse_url
函数对文件路径进行解析处理
parse_url($url,PHP_URL_PATH)
使用Curl
或readfile
进行远程文件请求,获取文件:
//获取远程文件所采用的方法
if($type){
$ch=curl_init();
$timeout=5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$img=curl_exec($ch);
curl_close($ch);
}else{
ob_start();
readfile($url);
$img=ob_get_contents();
ob_end_clean();
}
完整文件下载函数(可保留原路径原文件名称下载或是自定义路径文件名称下载):
/**
* [download_file 下载远程文件]
* @param [type] $url [远程图片地址]
* @param string $save_path [保存路径(默认原始路径1当前目录)]
* @param string $filename [保存文件名称(默认原始文件名1随机)]
* @param boolean $replace [是否同名覆盖]
* @param boolean $type [使用的下载方式]
* @return [type] [description]
*/
function download_file($url,$save_path='',$filename='',$replace=true,$type=false){
if (!$url)
return array('msg'=>'图片缺失','file_name'=>'','save_path'=>'');
if (empty($save_path) || $save_path == 1)
$save_path = $save_path==1 ? './' : dirname(parse_url($url,PHP_URL_PATH));
if (empty($filename) || !strrchr($filename, '.'))
$filename = empty($filename) ? basename($url) : (($filename===1 ? time().rand(1000,9999) : $filename).strrchr($url,'.'));
(substr($save_path, -1) != '/') && $save_path .= '/';
//创建保存目录
if(!file_exists($save_path)&&!mkdir($save_path,0777,true))
return array('msg'=>'创建目录失败','file_name'=>'','save_path'=>'');
if(file_exists($save_path.$filename))
if (!$replace)
return array('msg'=>'该文件已存在','file_name'=>'','save_path'=>'');
@unlink($save_path.$filename);
//获取远程文件所采用的方法
$url = iconv("utf-8", "gbk", $url);
if($type){
$ch=curl_init();
$timeout=5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$img=curl_exec($ch);
curl_close($ch);
}else{
ob_start();
readfile($url);
$img=ob_get_contents();
ob_end_clean();
}
//$size=strlen($img);
//文件大小
$fp2=@fopen($save_path.$filename,'a');
fwrite($fp2,$img);
fclose($fp2);
unset($img,$url);
return array('file_name'=>$filename,'save_path'=>$save_path.$filename);
}
本文为冯奎原创文章,转载无需和我联系,但请注明来自冯奎博客fengkui.net
最新评论