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

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

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

  1. private function search_content_img($content){
  2. //匹配img标签src属性中?之前部分的正则
  3. $img_pattern = "|<img[^>]+src=['\" ]?([^ '\"?]+)['\" >]|U";
  4. preg_match_all($img_pattern, $content, $img_out, PREG_SET_ORDER);
  5. $img_change = array();
  6. foreach ($img_out as $k => $value) {
  7. $tmp= $value[1];
  8. $file_info = pathinfo($tmp);
  9. $key = $file_info['filename'];
  10. $img_change[$key] = array(
  11. 'old_img'=> $tmp,
  12. 'new_img'=> '',
  13. );
  14. }
  15. return $img_change;
  16. }

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

  1. private function change_url($arr,$goods_img_path,$url,$goods_img_url){
  2.  
  3. $count = 0;
  4. $sum = count($arr);
  5. foreach ($arr as $key => $value) {
  6. $old_img = $value['old_img'];
  7. $filename = "";
  8. if(!(strpos($old_img,'http://')===false)){
  9. $filename = str_ireplace($goods_img_url,$goods_img_path,$old_img);
  10. }else{
  11. $filename = $goods_img_path.'/'.$old_img;
  12. }
  13. if(!file_exists($filename)){
  14. continue;
  15. }
  16.  
  17. $rs = $this->sendPicToServer($url, $filename);
  18. if($rs){
  19. $data = json_decode($rs,true);
  20. if($data['error']==0){
  21. $arr[$key]['new_img'] = $data['data']['pic_src'];
  22. $count++;
  23. }
  24. }
  25. }
  26. return $arr;
  27. }

(3)用curl上传图片

  1. function sendPicToServer($url, $filename,$use="avatar",$bizid="102"){
  2. $finfo = finfo_open(FILEINFO_MIME);
  3. $mimetype = finfo_file($finfo, $filename);
  4. $type = explode(";",$mimetype);
  5. finfo_close($finfo);
  6. $s = curl_init();
  7. curl_setopt($s, CURLOPT_POST,true);
  8. $picture = null;
  9.  
  10. if (PHP_VERSION<5.5) {
  11. $picture = "@$filename;type=$mimetype";
  12. }else{
  13. $picture = curl_file_create(@$filename,$type[0]);
  14. }
  15. $post_data = array (
  16. "picture" =>$picture,
  17. );
  18. curl_setopt($s, CURLOPT_POSTFIELDS, $post_data);
  19. curl_setopt($s, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  20. curl_setopt($s, CURLOPT_URL, $url);
  21. curl_setopt($s, CURLOPT_TIMEOUT, 1000);
  22. curl_setopt($s, CURLOPT_RETURNTRANSFER, 1);
  23. $body = curl_exec($s);
  24. if($body===false){
  25. $msg = 'Curl error no: ' . curl_errno($s).",";
  26. $msg.= 'Curl error info: ' . curl_error($s).".";
  27. $this->write_log($msg,1);
  28. }
  29. curl_close($s);
  30. return $body;
  31. }

(4)替换详情里的图片

  1. private function replace_content_img($content,$arr){
  2. $error = 1;
  3. if($arr){
  4. foreach ($arr as $key => $value) {
  5. $content = str_replace($value['old_img'], $value['new_img'], $content);
  6. }
  7. }
  8. if(strpos($content,'/shopfw/')===FALSE){
  9. $error = 0;
  10. }
  11. $rs = array(
  12. 'error'=>$error,
  13. 'content'=>$content,
  14. );
  15. return $rs;
  16. }

  

 

  

  

检出商品详情中的图片并替换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. org.apache.hadoop.hbase.MasterNotRunningException解决策略

    执行HBase时常会遇到个错误,我就有这种经历. ERROR: org.apache.hadoop.hbase.MasterNotRunningException: Retried 7 times 检 ...

  2. jquery复选框 选中事件 及其判断是否被选中_常用笔记

    checkbox的change事件可监听是否选中状态,也可添加onclick事件. var dom=$('.checkbox'); 1. 判断checkbox是否被选中 var dom=$('.che ...

  3. where子查询

    限定查询(WHERE子句) 之前的查询是将一张表的全部记录查询出来,那么现在如果希望可以根据指定的条件查询的话,则必须指定限定查询. 格式: 的雇员的信息 l  使用“<>”完成 l  S ...

  4. EhCache 配置信息

    How to Size Caches 官方文档:http://ehcache.org/documentation/configuration/cache-size [maxEntriesLocalHe ...

  5. Android——开机启动功能(Service和BroadcastReceiver)

    BroadcastReceiver(广播接收器):发出广播让服务器去接收 BootReceiver.java package com.example.chenshuai.test321; import ...

  6. redis+nginx+tomcat故障大全

    tomcat+nginx+redis中 redis死掉了???确实是防火墙问题centos7用的firewalldfirewalld默认已经安装并启用了,如果需要nginx可以访问需要执行以下命令:# ...

  7. 升级 Elasticsearch 集群数量实战记录

    搜索引擎 升级 Elasticsearch 集群数量实战记录 现在线上有一个elasticsearch集群搜索服务有三台elasticsearch实例(es1.es2.es3),打算将其升级为5台(增 ...

  8. 2012Hulu校园招聘笔试题

    一.填空 侧重逻辑思维,没有语言.具体技术考察,大部分属于组合数学.算法.比较基本的知识点有二元树节点树.最小生成树.Hash函数常用方法等. 二.编程题 1.正整数剖分 2.AOE关键路径 3.二元 ...

  9. HwPointEventFilter: do not support AFT because of no config华为手机进入工程菜单

    在调试时应用报出HwPointEventFilter: do not support AFT because of no config 是因为华为系统里设置了不打印log 解决方法是在拨号界面输入*# ...

  10. Linux进程间通信之管道(pipe)、命名管道(FIFO)与信号(Signal)

    整理自网络 Unix IPC包括:管道(pipe).命名管道(FIFO)与信号(Signal) 管道(pipe) 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道 ...