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

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

  

 

  

  

检出商品详情中的图片并替换url的更多相关文章

  1. svn检出服务器项目中出现的could not connect to server

    今天来新同事,新配的电脑装上SVN,Myeclipse后,检出服务器的项目老是出现文件不存在,could not connect to server.最后上网搜了下, 1.先用电脑ping服务器,看网 ...

  2. php采集文章中的图片获取替换到本地

    /** * 获取替换文章中的图片路径 * @param string $xstr 内容 * @param string $keyword 创建照片的文件名 * @param string $oriwe ...

  3. 模拟app上商品详情点击图片放大并且可以切换大图

    主要使用swiper插件,这里使用各小技巧,就是用两个swiper容器,点击一个小图容器,去让大图容器展示出来 小图容器 <div class="q_banner"> ...

  4. Day13_商品详情及静态化

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 0.学习 ...

  5. 微信中web页面实现和公众号中查看图片一样的效果

    最近开发了一套资讯相关的web页面,嵌套在微信中,可支持点赞.评论等...在文章详情中,图片需要点击放大,随手势放大缩小,左右可滑动切换,总之类似于微信公众号效果. 开始想的方案是用轮播插件.或者在i ...

  6. Git如何检出指定目录或文件

    系统版本:Window 10,Git 版本:2.7.1 对于大型 Git 仓库,每次执行 Git 命令,都需要经过漫长的等待,特别是要经常执行的 git status 命令.下面是一个例子... 从 ...

  7. Vue框架H5商城类项目商品详情点击返回弹出推荐商品弹窗的实现方案

    需求场景: 非推荐商品详情页返回的时候弹出弹窗推荐商品,点击弹窗按钮可以直接访问推荐商品: 只有直接进入商品详情页返回才会弹出推荐商品弹窗: 每个用户访问只能弹一次(除非清除缓存). 需求分析: 1. ...

  8. php读取出字符串中的img标签中的图片路径

    php读取出字符串中的img标签中的图片路径 $pageContents = '字符串,带img标签'; $pageContents = str_replace('\"','"', ...

  9. Eclipse新项目检出后报错第一步:导入lib中的jar包【我】

    新检出项目报错,第一步,先看项目 web-info下的 lib目录里的包是不是都添加到项目构建中了,可以全选先添加到项目构建中,看项目是否还在报错.

随机推荐

  1. [Python Essential Reference, Fourth Edition (2009)]读书笔记

    Python programs are executed by an interpreter. When you use Python interactively, the special varia ...

  2. [服务]Crontab和每隔10S执行一次

    转自:https://www.cnblogs.com/juandx/archive/2015/11/24/4992465.html linux下定时执行任务的方法  在LINUX中你应该先输入cron ...

  3. RavenDb学习(九)高级特性下半部分

    .聚合缓存 RavenDb默认是缓存所有的请求url的,最大的缓存请求数默认是2048 documentStore.Conventions.ShouldCacheRequest = url => ...

  4. amcharts categoryAxis

    amcharts中给出的sample lineWithMultipleValueAxes,是这样的 我们对横坐标label做一些改变: var categoryAxis = chart.categor ...

  5. PCL点云变换与移除NaN

    对点云的操作可以直接应用变换矩阵,即旋转,平移,尺度,3D的变换就是要使用4*4 的矩阵,例如:       等等模型 在这里直接使用程序开实现一个点云的旋转,新建文件matrix.cpp #incl ...

  6. E/MediaPlayer: start called in state 4, mPlayer(0xcc719a40)解决

    在使用MediaPlayer播放音频时报出 E/MediaPlayer: start called in state 4, mPlayer(0xcc719a40)错误 贴出代码 mMediaPlaye ...

  7. 自学QT之qss教程

    这篇文章来自于QT的帮助文档,你要是看了最新版的,会发现讲解得更棒.如果你的英文不是那么好,或者说看着头疼,那还是来看此篇吧. 在此之前说一个帮助文档的特别用法,绝不仅仅是搜单词,QT的文档非常强大的 ...

  8. 自然语言交流系统 phxnet团队 创新实训 项目博客 (三)

    语音转文本部分是调用的科大讯飞的在线语音,它的激发方式是按键,通过按钮触发开启安卓设备的录音,此部分需要在源码中写入关于安卓权限的要求,来调用安卓的录音权限,当按钮被激发,则开始进入语音录制阶段,将麦 ...

  9. 《FPGA全程进阶---实战演练》第九章 计数器要注意

    本小节我们来做一个好玩的事情,就是计数器,还记得在做LED自加实验时我们就曾经提到过关于计数器的相关议题,那么这节我们就来讨论讨论. 探讨一下如下的问题:请用verilog记八个数的写法,分析这个可以 ...

  10. Java数据通讯中使用Googgle Protobuf 序列化与反序列化

    概念 1.什么是protocol buffer ProtocolBuffer是用于结构化数据串行化的灵活.高效.自动的方法,有如XML,不过它更小.更快.也更简单.你可以定义自己的数据结构,然后使用代 ...