VIP福利
主页 > 建站问题 > 织梦技巧 > dedecms 删除文章同时删除图片的方法(1)

dedecms 删除文章同时删除图片的方法(1)

有时候我们删除文章的时候,文章的图片还是会留存在你的图片文件夹上面,这样很占服务器的内存,程序也会变得很大,所以我们需要删除文章的同时把文章里的图片也对应的删掉, 但织梦 […]



有时候我们删除文章的时候,文章的图片还是会留存在你的图片文件夹上面,这样很占服务器的内存,程序也会变得很大,所以我们需要删除文章的同时把文章里的图片也对应的删掉,
织梦本身是不支持的,需要经过小的二次开发才可以,下面织梦帮教你们怎么做,经过测试可以用的,

首先需要修改的php文件修改前备份好!

第一步找到 

/include/extend.func.php

复制以下的全部代码直接覆盖 到 extend.func.php 文件

001 <?php
002  
003 function GetPicsTruePath($body,$litpic) //解析body数据,获得所有图片的绝对地址
004  
005 {
006  
007 $delfiles = array();//存储图片地址数据
008  
009 if(!empty($litpic))
010  
011 {
012  
013 $litpicpath = GetTruePath();
014  
015 $litpicpath .= $litpic;
016  
017 $delfiles[] = $litpicpath;//缩略图地址
018  
019 }
020  
021 preg_match_all("/src=["|'|S|s]([^ |/|>]*){0,}(([^>]*).(gif|jpg|png))/isU",$body,$tmpdata);
022  
023 $picspath = array_unique($tmpdata[2]);//body中所有图片的地址
024  
025 foreach($picspath as $tmppath)
026  
027 {
028  
029 $path = GetTruePath();//获得绝对路径
030  
031 $picpath = preg_replace("/[a-zA-z]+://[^ |/|s]*/",'',$tmppath);//去掉网址部分
032  
033 $path .=$picpath;
034  
035 $delfiles[] = $path;//保存处理后的数据
036  
037 }
038  
039 return $delfiles;
040  
041 }
042  
043 function WriteToDelFiles($msg)//删除文章的时候会通过此函数记录日志
044  
045 {
046  
047 if(empty($msg)) $savemsg="未获得消息";
048  
049 else $savemsg = $msg;
050  
051 $errorFile = dirname(__FILE__).'/../data/del_body_file.txt';//删除记录文件
052  
053 $fp = @fopen($errorFile, 'a');
054  
055 @fwrite($fp," {$savemsg}");
056  
057 @fclose($fp);
058  
059 }
060  
061 //获得文章Body数据
062  
063 function GetArcBody($aid)
064  
065 {
066  
067 global $dsql;
068  
069 $query = "SELECT dede_addonarticle.body FROM dede_addonarticle WHERE dede_addonarticle.aid = '$aid'";
070  
071 $row = $dsql->GetOne($query);
072  
073 if(is_array($row)) return $row;
074  
075 else return false;
076  
077 }
078  
079 function litimgurls($imgid=0){
080  
081 global $lit_imglist;
082  
083 $dsql = new DedeSql(false);
084  
085 //获取附加表
086  
087 $row = $dsql->GetOne("SELECT c.addtable FROM dede_archives AS a LEFT JOIN dede_channeltype AS c ON a.channel=c.id where a.id='$imgid'");
088  
089 $addtable = trim($row['addtable']);
090  
091 //获取图片附加表imgurls字段内容进行处理
092  
093 $row = $dsql->GetOne("Select imgurls From `$addtable` where aid='$imgid'");
094  
095 //调用inc_channel_unit.php中ChannelUnit类
096  
097 $ChannelUnit = new ChannelUnit(2,$imgid);
098  
099 //调用ChannelUnit类中GetlitImgLinks方法处理缩略图
100  
101 $lit_imglist = $ChannelUnit->GetlitImgLinks($row['imgurls']);
102  
103 //返回结果
104  
105 return $lit_imglist;
106  
107 }
108  
109 ?>



共有 条评论