UCMS添加文章正文中的遠程圖片自動保存到本地方法
遠程圖片保存到本地全欄目可用(BY:玉龍 QQ:33942704)
使用方法:把下列代碼全部復制到ucms/admin_config.php文件里面
//保存遠程圖片到本地
$query = $GLOBALS['db'] -> query("SELECT * FROM ".tableex('channel')." order by corder asc"); //列出所有欄目
$all_category_hook = $GLOBALS['db'] -> fetchall($query);
foreach($all_category_hook as $key=>$val) {
admin_hook($val['cid'],'addposted;editposted','auto_save_image'); //使用鉤子
}
//開始保存圖片
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);//下載圖片
$img=getImg($arcurl);//curl下載圖片,支持https
//根據(jù)圖片的路徑獲取圖片屬性值
$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位數(shù)的隨機字符文件名
$filecachs=$dirslsitss."/".$fileimgname;
$fanhuistr = file_put_contents($filecachs, $img );
$saveimgfile = "/uploadfile/image/".$d."/".$fileimgname;
$content=str_replace($imgurl,$saveimgfile,$content);//替換內(nèi)容中圖片地址
}
}
global $thisid;
$query = $GLOBALS['db'] -> query("update ".tableex('article')." SET content='".$content."' WHERE id=".$thisid."");
}
}
//生成隨機字符串
function getRandChar($length){
$str = null;
$strPol = "0123456789abcdefghijklmnopqrstuvwxyz";//小寫字母以及數(shù)字
$max = strlen($strPol)-1;
for($i=0;$i<$length;$i++){
$str.=$strPol[rand(0,$max)];
}
return $str;
}
//curl下載圖片
function getImg($url) {
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, 'GET' );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );//跳過ssl驗證
curl_setopt ( $ch, CURLOPT_URL, $url );
ob_start ();
curl_exec ( $ch );
$return_content = ob_get_contents ();
ob_end_clean ();
return $return_content;
}