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

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

    https://developer.apple.com/news/?id=12032015a Swift is Now Open Source December 3, 2015 Join the op ...

  2. centos 6.5 升级php到5.6.17版本

    1. 下载php5.6.17版本:编译安装, ./configure --prefix=/usr/local/php5. --with-config-/etc --with-mysql=/usr/lo ...

  3. 【C#】多线程解决UI界面卡死的问题

    一个经典的例子: http://www.cnblogs.com/wangchuang/p/4485797.html 问题: 都说Invoke是同步的,BeginInvoke是异步的,但为何用Begin ...

  4. Java IO流学习

    Java IO流学习 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...

  5. JS实现IE下打印和打印预览

    http://blog.csdn.net/rongyongfeikai2/article/details/8460598 ——————————————————————————————————————— ...

  6. Java设计模式(14)责任链模式(Chain of Responsibility模式)

    Chain of Responsibility定义:Chain of Responsibility(CoR) 是用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合, ...

  7. 安卓程序代写 网上程序代写[转]eclipse快捷键

    F 键类 F2 显示详细信息 F3 跳到声明或定义的地方 Ctrl + 键类 Ctrl+1 快速修复 ( 最经典的快捷键 , 就不用多说了 ) Ctrl+D 删除当前行 Ctrl+E 快速显示当前 E ...

  8. 表格细边框的两种CSS实现方法

    在网页制作中,细边框这个制作方法是必不可少的.这里介绍2种常见的表格细边框制作方法,均通过XHTML验证. <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...

  9. Chrome驱动安装问题

    1.org.openqa.selenium.WebDriverException: unknown error: call function result missing 'value' 原因:浏览器 ...

  10. 认真研究下HTML之id、name、form、submit

    #起因 同事希望在提交之后关闭父窗口,但是,始终没有提交请求发出.他的代码大概如下: // <form id='f' action=... // <button onclick='fun( ...