应用场景
采集时图片没有入库
之前所有图片都是站外链接
功能
批量更新 自动保存远程图片到本地
可匹配html与markdown两种格式
使用方法
首先确保已安装了
帝国万能API插件v1.0
新建一个接口,将下面代码复制到接口保存。再点击预览即可。
接口代码
<?php defined("ECMSAPI_MOD") or exit; $page = $api->get('page' , 0 , 'intval'); $page = $api->load('fun')->toInt($page , 1); $docs = $api->load('db')->select('[!db.pre!]ecms_news_data_1' , '*' , 1 , '10,'.$page , 'id desc'); if(!$docs){ $api->show('处理完成'); } $uploader = $api->load('file' , [ 'mimes' => [ 'image/webp' => 'webp', 'image/jpeg' => 'jpg', 'image/gif' => 'gif', 'image/png' => 'png' ] ])->setOption('size' , 1024*1024); foreach($docs as $doc){ $text = stripcslashes($doc['newstext']); $id = $doc['id']; $classid = $doc['classid']; // 匹配md格式 $text = preg_replace_callback('/\!\[(.*?)\]\((.*?)\)/is' , function($matches) use ($uploader , $doc){ // 图片地址 $url = trim($matches[2]); // 本地文件原样返回 if(strpos($url , 'http://') !== 0 && strpos($url , 'https://') !== 0){ return $matches[0]; } // 将远程图片下载到本地 $fileinfo = $uploader->download($url , $doc['id'] , $doc['classid']); // 下载失败原样返回 if(!$fileinfo){ return $matches[0]; } return '!['.$matches[1].']('.$uploader->getFullPath($fileinfo).')'; } , $text); // 匹配html格式 $text = preg_replace_callback('/<\s*img\s+[^>]*?src\s*=\s*(\'|\")(.*?)\\1[^>]*?\/?\s*>/i' , function($matches) use ($uploader , $doc){ // 图片地址 $url = trim($matches[2]); // 本地文件原样返回 if(strpos($url , 'http://') !== 0 && strpos($url , 'https://') !== 0){ return $matches[0]; } // 将远程图片下载到本地 $fileinfo = $uploader->download($url , $doc['id'] , $doc['classid']); // 下载失败原样返回 if(!$fileinfo){ return $matches[0]; } return str_replace($url , $uploader->getFullPath($fileinfo) , $matches[0]); } , $text); $api->load('db')->update('[!db.pre!]ecms_news_data_1' , ['newstext' => $text] , 'id='.$id); } $jumpurl = './index.php?mod='.ECMSAPI_MOD.'&act='.ECMSAPI_ACT.'&page='.($page+1); $html = <<<HTML 第{$page}页处理完成,即将跳转到下一页! <script type="text/javascript"> setTimeout(function(){ window.location.href = "{$jumpurl}"; }, 1000); </script> HTML; $api->show($html);
发表评论