原有的批量导入是按照系统本身的功能导入商品,现在需要用接口将图片上传图片服务器
所以需要将批量导入的商品图片取出来,上传后替换掉原来的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;
}