检出商品详情中的图片并替换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目录里的包是不是都添加到项目构建中了,可以全选先添加到项目构建中,看项目是否还在报错.
随机推荐
- velocity单引号与双引号
(1)最外层是用单引号包围时,双引号直接使用就可以了,两个连续的单引号表示一个单引号:#set($var2 = 'A"B''C') --> $var2 的值为 A"B'C(2 ...
- JavaScript 中 类型转换
转自 https://www.cnblogs.com/wuxiaoshang/p/5835627.html // 转换成字符型 var married = false; alert(married.t ...
- CAS (8) —— Mac下配置CAS到JBoss EAP 6.4(6.x)的Standalone模式(服务端)
CAS (8) -- Mac下配置CAS到JBoss EAP 6.4(6.x)的Standalone模式(服务端) jboss版本: jboss-eap-6.4-CVE-2015-7501 jdk版本 ...
- mac上怎么安装dmg
双击dmg文件,就会打开了,里面一般就是应用程序,拖到Finder-应用程序(如果里面是pkg格式,就是安装包,双击安装),然后还要注意一个安装完了以后,要把刚才载入的dmg推出,方法是把桌面上那个图 ...
- PCL特征点与配准(1)
关于输入一个具体的物体的点云,从场景中找出与该物体点云相匹配的,这种方法可以用来抓取指定的物体等等,具体的代码的解释如下,需要用到的一些基础的知识,在之前的博客中都有提及,其中用到的一些方法可以翻阅前 ...
- MFC中的句柄
1.引出句柄 CDC问题:1.CDC dc;dc.LineTo(point);无法运行 2.CDC *dc=GetDC();dc->LineTo(point);就可以运行了 MFC中有大量的句柄 ...
- Idea maven项目不能新建package和class的解决
如图,新建的maven项目不能新建package 这是因为Java是普通的文件夹,要设置为 现在就可以了
- 00-01.PHP 网站假设win7配置自己的IIS服务器亲自做的图文很详细 [转 - 赞 ]
win7配置自己的IIS服务器亲自做的图文很详细 分步阅读 跟人网站爱好初学者必看的win7系统配置自己的IIS,可以在你自己的电脑上配置网站服务器发不到网上,下面就跟着我的步骤一起做吧100%成功. ...
- JUnit教程
测试是检查应用程序是否是工作按照要求,并确保在开发者水平,单元测试进入功能性的处理.单元测试是单一实体(类或方法)的测试. 单元测试在每一个软件公司开发高品质的产品给他们的客户是十分必要的. 单元测试 ...
- 嵌入式开发之hi3519---网络不通问题rmii
http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=18092&extra=page%3D1%26filter%3Dtypei ...