编程爱好者之家

php下载远程图片到本地

2018-02-28 19:04:57 249

最近用到了下载远程图片的功能,于是就写了个小结,希望对大家有帮助,代码如下

function getImage($url,$save_dir='Public/upload/downpic/',$filename='',$type=1){
    $url = str_replace('https://','http://',$url);
    if(!isset(parse_url($url)['host']) || strstr(strtolower(parse_url($url)['host']),'anruan.com')){
        return $url;
    }
    $filename = trim($filename);
    if(trim($filename)==''){//保存文件名
        $filename = basename($url);
        $filename = trim($filename);
        $houzuiA = pathinfo($filename);
        if(!isset($houzuiA['extension']) || empty($houzuiA['extension'])){    
            $filename = time().rand(100,999).'.jpg';
        }else{    
            $filename = time().rand(100,999).'.'.$houzuiA['extension'];
        }
    }
    //创建保存目录
    $save_dir = $save_dir.date('Ymd').'/';
    if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){
        return $url;
    }
    //获取远程文件所采用的方法
    if($type){
        $ch=curl_init();
        $timeout=5;
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt ($ch, CURLOPT_REFERER, 'http://'.parse_url($url)['host']);//这里为空也行,为他的主域名也可
        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();
    }
   
    //文件大小
    if(($fp2=@fopen(trim($save_dir.$filename),'a')) !== false){
        fwrite($fp2, $img);
        fclose($fp2);
    }
    unset($img,$url);   
    //返回绝对路径
    return C('INDEX_CENTER_URL').$save_dir.$filename;
}


同类文章