zl程序教程

您现在的位置是:首页 >  其它

当前栏目

检出商品详情中的图片并替换url

图片 url 替换 商品 详情
2023-09-14 09:00:01 时间

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

所以需要将批量导入的商品图片取出来,上传后替换掉原来的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;
    }