php远程下载http图片到本地方法

做微信客服的时候要发送小卡片功能,要用到图片, 这边的图片要上传到腾讯返回media_id ,不能用http直接给他一个地址,所以要上传非本地的图片要下载到本地之后再使用小程序提供的media_id

比如我要下载 这张图片

https://images.cnblogs.com/cnblogs_com/liaosp/1058239/o_ban%E7%AD%89%E7%AD%89ner.jpg

$this->getIage('https://images.cnblogs.com/cnblogs_com/liaosp/1058239/o_ban%E7%AD%89%E7%AD%89ner.jpg');

第二个参数是保存的地址,默认为根目录

    public function getImage($url,$save_dir='',$filename='',$type=0){
        if(trim($url)==''){
            return array('file_name'=>'','save_path'=>'','error'=>1);
        }
        if(trim($save_dir)==''){
            $save_dir='./';
        }
        if(trim($filename)==''){//保存文件名
            $ext=strrchr($url,'.');
            if($ext!='.gif'&&$ext!='.jpg'){
                return array('file_name'=>'','save_path'=>'','error'=>3);
            }
            $filename=time().$ext;
        }
        if(0!==strrpos($save_dir,'/')){
            $save_dir.='/';
        }
        //创建保存目录
        if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){
            return array('file_name'=>'','save_path'=>'','error'=>5);
        }
        //获取远程文件所采用的方法
        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_dir.$filename,'a');
        fwrite($fp2,$img);
        fclose($fp2);
        unset($img,$url);
        return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0);
    }

//廖圣平博客网络整理

猜你喜欢

转载自blog.csdn.net/qq_22823581/article/details/80337714
今日推荐