UCMS文章发布时远程图片本地化

08 / Jan / 2022 PM Note 50

利用UCMS后台钩子, 添加文章时远程图片本地化,增加所有图片后缀支持,增加无后缀支持。目前方法只能在文章添加成功或修改成功后重新修改一次文章内容才会生效,有更好的方法可以联系博主!

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

admin_hook(1,'addposted;editposted','auto_save_image'); //其中1为分类ID,哪个分类需要保存远程图片自行修改
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;
}
#

发布评论

© TIM All Rights Reserved sitemap

🌈Theme by TIM