UCMS 文章远程图片本地化 by 玉龙

2019-03-19丨源码丨2 条评论 丨3504 次阅读

利用UCMS后台钩子, 添加文章时远程图片本地化,增加所有图片后缀支持,增加无后缀支持,如百度的图片:https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=3415557737,

1、修改ucms/admin_config.php 配置文件

增加一行 admin_hook(1,'addposted;editposted','auto_save_image'); 其中1为分类ID,哪个分类需要保存远程图片自行修改,
目前方法只能在文章添加成功或修改成功后重新修改一次文章内容,有更好的方法请告诉我!

2、在下面增加以下代码:

function auto_save_image(){ 
//保存路径
$content = $_POST['content'];
$myweb = "http://".$_SERVER["HTTP_HOST"];//本站域名下文件不保存

$d = date('Ymd', time());//按日期生成文件夹
$dirslsitss = $_SERVER ['DOCUMENT_ROOT'].'/uploadfile/image/'.$d;//分类是否存在
if(!file_exists($dirslsitss)){
mkdir($dirslsitss,0777,true);
}

//匹配图片的src
preg_match_all('#<img.*?src="([^"]*)"[^>]*>#i', $content,$match);
foreach($match[1] as $imgurl){
$imgurl = $imgurl;

//如果是本站图片则跳过下载
if(is_int(strpos($imgurl,'http')) && strpos($imgurl,$myweb) === false){

$arcurl = $imgurl;
$img=file_get_contents($arcurl);

//根据图片的路径获取图片属性值
$imgAttr = get_headers($arcurl, true );
//取得图片后缀名
$itype=$imgAttr['Content-Type'];
if(!preg_match("#\.(jpg|gif|png)#i",$itype))
{
if($itype=='image/gif')
{
$itype = ".gif";
}
else if($itype=='image/png')
{
$itype = ".png";
}
else
{
$itype = '.jpg';
}
}

if(!empty($img)) {
//保存图片到服务器
$fileimgname = getRandChar(10).$itype;//生成10位数的随机字符文件名
$filecachs=$dirslsitss."/".$fileimgname;
$fanhuistr = file_put_contents($filecachs, $img );
$saveimgfile = "/uploadfile/image/".$d."/".$fileimgname;
$content=str_replace($imgurl,$saveimgfile,$content);//替换内容中图片地址
}
}
global $thisid;
$query = $GLOBALS['db'] -> query("update ".tableex('article')." SET content='".$content."' WHERE id=".$thisid."");
}
}
//生成随机字符串
function getRandChar($length){
$str = null;
$strPol = "0123456789abcdefghijklmnopqrstuvwxyz";//小写字母以及数字
$max = strlen($strPol)-1;

for($i=0;$i<$length;$i++){
$str.=$strPol[rand(0,$max)];
}
return $str;
}
标签: UCMS

热门文章

最新回复

标签

已有 2 条评论


  1. 李然

    你好 我想问下 如果是火车头采集入库 这个图片地址还是采集站的地址 上面有什么方法直接可以解决成自己的网站地址么 谢谢

    1. bingo

      采集的时候可以替换掉,建议不要写成绝对地址。如果已经入库了,就在数据库更改

发表新评论