检出商品详情中的图片并替换url
原有的批量导入是按照系统本身的功能导入商品,现在需要用接口将图片上传图片服务器
所以需要将批量导入的商品图片取出来,上传后替换掉原来的url
(1)检出详情中的图片,用文件名做key
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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上传图片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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)替换详情里的图片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)