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

所以需要将批量导入的商品图片取出来,上传后替换掉原来的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. Map 与 JavaBean 的相互装换

    目的 为了方便使用 DbUtils,在插入数据时需要传入含有占位符的 SQL 语句和对应占位符的值(数组),封装代码如下: /** * 插入实体 */ public static <T> ...

  2. ContentType和@ResponseBody

    ContentType 为 application/x-www-form-urlencoded (表单)时,入参前不需要加@ResponseBody: ContentType 为 applicatio ...

  3. [转]关于Json格式

    从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独 ...

  4. ArcEngine下SceneControl叠加影像数据(构建三维地形)

    载入完TIN数据后.须要在三维物体上描绘细节.即纹理:建立DEM表面点与纹理空间点的关系,即纹理映射.叠加影像数据就是把影像看作纹理.将其贴在地形表面,让其具有地形起伏的三维效果. 这里与GlobeC ...

  5. 10、QT分析之WebKit

    该文章整理自 网易博客 http://blog.163.com/net_worm/blog/static/12770241920101831312381/ 转载请注明出处 WebKit是QT4新整合的 ...

  6. Zookeeper 快速理解

    转自:http://blog.csdn.net/colorant/article/details/8444283 == 是什么 == 目标Scope(解决什么问题) 为分布式系统提供高可靠性的协同工作 ...

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

    项目技术借鉴报告: 一.服务器端(Server) 1.分词 分词使用的是庖丁分词.使用盘古分词词库和词素作为辅助.其中包括下载Jar包并且使用. 2.人工神经网络 以网上已有的初级网络为蓝图,结合机器 ...

  8. install ubuntu on Android mobile phone

    Android 是基于Linux内核的开源操作系统,主要用在移动设备上.当然同样是基于Linux内核的操作系统,现在支持的Android的智能手机理论来说都能运行基于Linux的操作系统,比如现在流行 ...

  9. activity 与 fragment生命周期

    一.Activity的生命周期图: 二.Fragment生命周期图 三.对比图 Log数据 Activity﹕    onCreateFragment﹕ onAttachFragment﹕ onCre ...

  10. SpagoBI 教程 Lesson 3: Highchart Dashboards

    SpagoBI Lesson 3: Highchart Dashboards Business Intelligence dashboards Every car comes with a dash ...