检出商品详情中的图片并替换url详解编程语言

原有的批量导入是按照系统本身的功能导入商品,现在需要用接口将图片上传图片服务器

所以需要将批量导入的商品图片取出来,上传后替换掉原来的url

(1)检出详情中的图片,用文件名做key

private function search_content_img($content){ 
        //匹配img标签src属性中?之前部分的正则 
        $img_pattern = "|<img[^>]+src=['/" ]?([^ '/"?]+)['/" >]|U"; 
        preg_match_all($img_pattern, $content, $img_out, PREG_SET_ORDER); 
        $img_change = array(); 
        foreach ($img_out as $k => $value) { 
            $tmp= $value[1]; 
            $file_info = pathinfo($tmp); 
            $key = $file_info['filename']; 
            $img_change[$key] = array( 
                'old_img'=> $tmp, 
                'new_img'=> '', 
                ); 
        } 
        return $img_change; 
    } 

(2)找出图片的实际路径,调用上传接口,将生成的url,保存到对应的key

private function change_url($arr,$goods_img_path,$url,$goods_img_url){ 
 
        $count = 0; 
        $sum = count($arr); 
        foreach ($arr as $key => $value) { 
            $old_img = $value['old_img']; 
            $filename = ""; 
            if(!(strpos($old_img,'http://')===false)){ 
                $filename = str_ireplace($goods_img_url,$goods_img_path,$old_img); 
            }else{ 
                $filename = $goods_img_path.'/'.$old_img; 
            } 
            if(!file_exists($filename)){       
                continue; 
            } 
 
            $rs = $this->sendPicToServer($url, $filename); 
            if($rs){ 
                $data = json_decode($rs,true); 
                if($data['error']==0){ 
                    $arr[$key]['new_img'] = $data['data']['pic_src']; 
                    $count++; 
                } 
            } 
        } 
        return $arr; 
    } 

(3)用curl上传图片

function sendPicToServer($url, $filename,$use="avatar",$bizid="102"){ 
        $finfo    = finfo_open(FILEINFO_MIME); 
        $mimetype = finfo_file($finfo, $filename); 
        $type = explode(";",$mimetype); 
        finfo_close($finfo); 
        $s = curl_init(); 
        curl_setopt($s, CURLOPT_POST,true); 
        $picture = null; 
 
        if (PHP_VERSION<5.5) { 
            $picture = "@$filename;type=$mimetype"; 
        }else{ 
            $picture = curl_file_create(@$filename,$type[0]); 
        } 
        $post_data = array ( 
            "picture" =>$picture, 
        ); 
        curl_setopt($s, CURLOPT_POSTFIELDS, $post_data); 
        curl_setopt($s, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); 
        curl_setopt($s, CURLOPT_URL,            $url); 
        curl_setopt($s, CURLOPT_TIMEOUT,        1000); 
        curl_setopt($s, CURLOPT_RETURNTRANSFER, 1); 
        $body = curl_exec($s); 
        if($body===false){ 
            $msg = 'Curl error no: ' . curl_errno($s).","; 
            $msg.= 'Curl error info: ' . curl_error($s)."."; 
            $this->write_log($msg,1); 
        }  
        curl_close($s); 
        return $body; 
    } 

(4)替换详情里的图片

private function replace_content_img($content,$arr){ 
        $error = 1; 
        if($arr){ 
            foreach ($arr as $key => $value) { 
                $content = str_replace($value['old_img'], $value['new_img'], $content); 
            } 
        } 
        if(strpos($content,'/shopfw/')===FALSE){ 
            $error = 0; 
        } 
        $rs = array( 
            'error'=>$error, 
            'content'=>$content, 
            ); 
        return $rs; 
    } 

  

 

  

  

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/20399.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论