检出商品详情中的图片并替换url
原有的批量导入是按照系统本身的功能导入商品,现在需要用接口将图片上传图片服务器
所以需要将批量导入的商品图片取出来,上传后替换掉原来的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的更多相关文章
- svn检出服务器项目中出现的could not connect to server
今天来新同事,新配的电脑装上SVN,Myeclipse后,检出服务器的项目老是出现文件不存在,could not connect to server.最后上网搜了下, 1.先用电脑ping服务器,看网 ...
- php采集文章中的图片获取替换到本地
/** * 获取替换文章中的图片路径 * @param string $xstr 内容 * @param string $keyword 创建照片的文件名 * @param string $oriwe ...
- 模拟app上商品详情点击图片放大并且可以切换大图
主要使用swiper插件,这里使用各小技巧,就是用两个swiper容器,点击一个小图容器,去让大图容器展示出来 小图容器 <div class="q_banner"> ...
- Day13_商品详情及静态化
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 0.学习 ...
- 微信中web页面实现和公众号中查看图片一样的效果
最近开发了一套资讯相关的web页面,嵌套在微信中,可支持点赞.评论等...在文章详情中,图片需要点击放大,随手势放大缩小,左右可滑动切换,总之类似于微信公众号效果. 开始想的方案是用轮播插件.或者在i ...
- Git如何检出指定目录或文件
系统版本:Window 10,Git 版本:2.7.1 对于大型 Git 仓库,每次执行 Git 命令,都需要经过漫长的等待,特别是要经常执行的 git status 命令.下面是一个例子... 从 ...
- Vue框架H5商城类项目商品详情点击返回弹出推荐商品弹窗的实现方案
需求场景: 非推荐商品详情页返回的时候弹出弹窗推荐商品,点击弹窗按钮可以直接访问推荐商品: 只有直接进入商品详情页返回才会弹出推荐商品弹窗: 每个用户访问只能弹一次(除非清除缓存). 需求分析: 1. ...
- php读取出字符串中的img标签中的图片路径
php读取出字符串中的img标签中的图片路径 $pageContents = '字符串,带img标签'; $pageContents = str_replace('\"','"', ...
- Eclipse新项目检出后报错第一步:导入lib中的jar包【我】
新检出项目报错,第一步,先看项目 web-info下的 lib目录里的包是不是都添加到项目构建中了,可以全选先添加到项目构建中,看项目是否还在报错.
随机推荐
- org.apache.hadoop.hbase.MasterNotRunningException解决策略
执行HBase时常会遇到个错误,我就有这种经历. ERROR: org.apache.hadoop.hbase.MasterNotRunningException: Retried 7 times 检 ...
- jquery复选框 选中事件 及其判断是否被选中_常用笔记
checkbox的change事件可监听是否选中状态,也可添加onclick事件. var dom=$('.checkbox'); 1. 判断checkbox是否被选中 var dom=$('.che ...
- where子查询
限定查询(WHERE子句) 之前的查询是将一张表的全部记录查询出来,那么现在如果希望可以根据指定的条件查询的话,则必须指定限定查询. 格式: 的雇员的信息 l 使用“<>”完成 l S ...
- EhCache 配置信息
How to Size Caches 官方文档:http://ehcache.org/documentation/configuration/cache-size [maxEntriesLocalHe ...
- Android——开机启动功能(Service和BroadcastReceiver)
BroadcastReceiver(广播接收器):发出广播让服务器去接收 BootReceiver.java package com.example.chenshuai.test321; import ...
- redis+nginx+tomcat故障大全
tomcat+nginx+redis中 redis死掉了???确实是防火墙问题centos7用的firewalldfirewalld默认已经安装并启用了,如果需要nginx可以访问需要执行以下命令:# ...
- 升级 Elasticsearch 集群数量实战记录
搜索引擎 升级 Elasticsearch 集群数量实战记录 现在线上有一个elasticsearch集群搜索服务有三台elasticsearch实例(es1.es2.es3),打算将其升级为5台(增 ...
- 2012Hulu校园招聘笔试题
一.填空 侧重逻辑思维,没有语言.具体技术考察,大部分属于组合数学.算法.比较基本的知识点有二元树节点树.最小生成树.Hash函数常用方法等. 二.编程题 1.正整数剖分 2.AOE关键路径 3.二元 ...
- HwPointEventFilter: do not support AFT because of no config华为手机进入工程菜单
在调试时应用报出HwPointEventFilter: do not support AFT because of no config 是因为华为系统里设置了不打印log 解决方法是在拨号界面输入*# ...
- Linux进程间通信之管道(pipe)、命名管道(FIFO)与信号(Signal)
整理自网络 Unix IPC包括:管道(pipe).命名管道(FIFO)与信号(Signal) 管道(pipe) 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道 ...