文件下载保留原路径(PHP)

上一篇文章我们介绍Python保留原路径下载, 这一篇文章我们来介绍一下使用php, 如何保留原路径进行下载远程文件。

我们使用parse_url函数对文件路径进行解析处理

parse_url($url,PHP_URL_PATH)

使用Curlreadfile进行远程文件请求,获取文件:

//获取远程文件所采用的方法
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);
}

冯奎博客
请先登录后发表评论
  • latest comments
  • 总共0条评论