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

2021-07-01 0 3,469
有时候我们删除文章的时候,文章图片还是会留存在你的图片文件夹上面,这样很占服务器的内存,程序也会变得很大,所以我们需要删除文章的同时把文章里的图片也对应的删掉,
织梦本身是不支持的,需要经过小的二次开发才可以,下面织梦58符老师教你们怎么做,经过测试可以用的,
首先需要修改的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,"\r\n{$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 ?>
第二步 找到
\dede\inc\inc_batchup.php
复制以下的全部代码直接覆盖 到 inc_batchup.php 文件
001 <?php
002
003 function DelArc($aid,$type='ON',$onlyfile=false)
004
005 {
006
007 global $dsql,$cfg_cookie_encode,$cfg_multi_site,$cfg_medias_dir;
008
009 global $cuserLogin,$cfg_upload_switch,$cfg_delete,$cfg_basedir;
010
011 global $admin_catalogs, $cfg_admin_channel;
012
013 if($cfg_delete == 'N') $type = 'OK';
014
015 if(empty($aid)) return ;
016
017 $aid = ereg_replace("[^0-9]", '', $aid);
018
019 $arctitle = $arcurl = '';
020
021 //查询表信息
022
023 $query = "Select ch.maintable,ch.addtable,ch.nid,ch.issystem From `dede_arctiny` arc
024
025 left join `dede_arctype` tp on tp.id=arc.typeid
026
027 left join `dede_channeltype` ch on ch.id=arc.channel where arc.id='$aid' ";
028
029 $row = $dsql->GetOne($query);
030
031 $nid = $row['nid'];
032
033 $maintable = (trim($row['maintable'])=='' ? 'dede_archives' : trim($row['maintable']));
034
035 $addtable = trim($row['addtable']);
036
037 $issystem = $row['issystem'];
038
039 //查询档案信息
040
041 if($issystem==-1)
042
043 {
044
045 $arcQuery = "Select arc.*,tp.* from `$addtable` arc left join `dede_arctype` tp on arc.typeid=tp.id where arc.aid='$aid' ";
046
047 }
048
049 else
050
051 {
052
053 $arcQuery = "Select arc.*,tp.*,arc.id as aid from `$maintable` arc left join `dede_arctype` tp on arc.typeid=tp.id where arc.id='$aid' ";
054
055 }
056
057 $arcRow = $dsql->GetOne($arcQuery);
058
059 $arcBodyRow = GetArcBody($aid);
060
061 //检测权限
062
063 if(!TestPurview('a_Del,sys_ArcBatch'))
064
065 {
066
067 if(TestPurview('a_AccDel'))
068
069 {
070
071 if( !in_array($arcRow['typeid'], $admin_catalogs) && (count($admin_catalogs) != 0 || $cfg_admin_channel != 'all') )
072
073 {
074
075 return false;
076
077 }
078
079 }
080
081 else if(TestPurview('a_MyDel'))
082
083 {
084
085 if($arcRow['mid'] != $cuserLogin->getUserID())
086
087 {
088
089 return false;
090
091 }
092
093 }
094
095 else
096
097 {
098
099 return false;
100
101 }
102
103 }
104
105 //$issystem==-1 是单表模型,不使用回收
106
107 if($issystem == -1) $type = 'OK';
108
109 if(!is_array($arcRow)) return false;
110
111 /** 删除到回收站 **/
112
113 if($cfg_delete == 'Y' && $type == 'ON')
114
115 {
116
117 $dsql->ExecuteNoneQuery("Update `$maintable` set arcrank='-2' where id='$aid' ");
118
119 $dsql->ExecuteNoneQuery("Update `dede_arctiny` set `arcrank` = '-2' where id = '$aid'; ");
120
121 }
122
123 else
124
125 {
126
127 //删除数据库记录
128
129 if(!$onlyfile)
130
131 {
132
133 //删除相关附件
134
135 if($cfg_upload_switch == 'Y')
136
137 {
138
139 $dsql->Execute("me", "SELECT * FROM `dede_uploads` WHERE arcid = '$aid'");
140
141 while($row = $dsql->GetArray('me'))
142
143 {
144
145 $addfile = $row['url'];
146
147 $aid = $row['aid'];
148
149 $dsql->ExecuteNoneQuery("Delete From `dede_uploads` where aid = '$aid' ");
150
151 $upfile = $cfg_basedir.$addfile;
152
153 if(@file_exists($upfile)) @unlink($upfile);
154
155 }
156
157 }
158
159 $dsql->ExecuteNoneQuery("Delete From `dede_arctiny` where id='$aid'");
160
161 if($addtable != '')
162
163 {
164
165 $dsql->ExecuteNoneQuery("Delete From `$addtable` where aid='$aid' ");
166
167 }
168
169 if($issystem != -1)
170
171 {
172
173 $dsql->ExecuteNoneQuery("Delete From `dede_archives` where id='$aid' ");
174
175 }
176
177 $dsql->ExecuteNoneQuery("Delete From `dede_feedback` where aid='$aid' ");
178
179 $dsql->ExecuteNoneQuery("Delete From `dede_member_stow` where aid='$aid' ");
180
181 $dsql->ExecuteNoneQuery("Delete From `dede_taglist` where aid='$aid' ");
182
183 $dsql->ExecuteNoneQuery("Delete From `dede_erradd` where aid='$aid' ");
184
185 }
186
187 //删除文本数据
188
189 $filenameh = DEDEDATA."/textdata/".(ceil($aid/5000))."/{$aid}-".substr(md5($cfg_cookie_encode),0,16).".txt";
190
191 if(@is_file($filenameh)) @unlink($filenameh);
192
193 }
194
195 if(empty($arcRow['money'])) $arcRow['money'] = 0;
196
197 if(empty($arcRow['ismake'])) $arcRow['ismake'] = 1;
198
199 if(empty($arcRow['arcrank'])) $arcRow['arcrank'] = 0;
200
201 if(empty($arcRow['filename'])) $arcRow['filename'] = '';
202
203 //删除HTML
204
205 if($arcRow['ismake']==-1 || $arcRow['arcrank']!=0 || $arcRow['typeid']==0 || $arcRow['money']>0)
206
207 {
208
209 return true;
210
211 }
212
213 //强制转换多站点模式,以便统一方式获得实际HTML文件
214
215 $GLOBALS['cfg_multi_site'] = 'N';
216
217 $arcurl = GetFileUrl($arcRow['aid'],$arcRow['typeid'],$arcRow['senddate'],$arcRow['title'],$arcRow['ismake'],
218
219 $arcRow['arcrank'],$arcRow['namerule'],$arcRow['typedir'],$arcRow['money'],$arcRow['filename']);
220
221 if(!ereg("\?", $arcurl))
222
223 {
224
225 $htmlfile = GetTruePath().str_replace($GLOBALS['cfg_basehost'],'',$arcurl);
226
227 if(file_exists($htmlfile) && !is_dir($htmlfile))
228
229 {
230
231 @unlink($htmlfile);
232
233 $arcurls = explode(".", $htmlfile);
234
235 $sname = $arcurls[count($arcurls)-1];
236
237 $fname = ereg_replace("(\.$sname)$", "", $htmlfile);
238
239 for($i=2; $i<=100; $i++)
240
241 {
242
243 $htmlfile = $fname."_{$i}.".$sname;
244
245 if( @file_exists($htmlfile) ) @unlink($htmlfile);
246
247 else break;
248
249 }
250
251 }
252
253 }
254
255 //解析Body中的资源,并删除
256
257 $willDelFiles = GetPicsTruePath($arcBodyRow['body'],$arcRow['litpic']);
258
259 $nowtime = time();
260
261 $executetime = MyDate('Y-m-d H:i:s',$nowtime);//获得执行时间
262
263 $msg = "\r\n文章标题:$arcRow[title]";
264
265 WriteToDelFiles($msg);
266
267 if(!empty($willDelFiles))
268
269 {
270
271 foreach($willDelFiles as $file)
272
273 {
274
275 if(file_exists($file) && !is_dir($file))
276
277 {
278
279 if(unlink($file)) $msg = "\r\n位置:$file\r\n结果:删除成功!\r\n时间:$executetime";
280
281 else $msg = "\r\n位置:$file\r\n结果:删除失败!\r\n时间:$executetime";
282
283 }
284
285 else $msg = "\r\n位置:$file\r\n结果:文件不存!\r\n时间:$executetime";
286
287 WriteToDelFiles($msg);
288
289 }//END foreach
290
291 }
292
293 else
294
295 {
296
297 $msg = "\r\n未在Body中解析到数据\r\nBody原始数据:$arcBodyRow[body]\r\n时间:$executetime";
298
299 WriteToDelFiles($msg);
300
301 }
302
303 return true;
304
305 }
306
307 //获取真实路径
308
309 function GetTruePath($siterefer='', $sitepath='')
310
311 {
312
313 $truepath = $GLOBALS['cfg_basedir'];
314
315 return $truepath;
316
317 }
318
319 ?>
到这里就结束了 ,很简单吧, 我们再去试着删除一篇文章 ,你会发现你删除这篇文章以后,这篇文章的缩列图和内容上的图片都同时删除了!
收藏 (0) 打赏

您的支持是我们前进最大的动力!

打开微信扫一扫,即可进行扫码打赏哦
点赞 (0)

本站声明: 根据2013年1月30日《计算机软件保护条例》2次修订第17条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬,鉴于此,也希望大家遵守相关法律法规使用、研究软件。 1、本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解。 2、下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。 3、站内资源均来源于网络公开发表文件或网友投稿发布,如侵犯您的权益,请联系管理员处理。 4、本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用,如有链接无法下载、失效或广告,请联系客服处理。 5、所有资源均收集于互联网仅供学习、参考和研究,请理解这个概念,所以不能保证每个细节都符合你的需求,也可能存在未知的BUG与瑕疵,因本站资源均为可复制品,所 以不支持任何理由的退款兑现,请熟知后再下载。

彤彤模板团 织梦CMS教程 dedecms 删除文章同时删除图片的方法 https://www.xiaoyuerqingfen.cn/2454.html

一家有态度的精品资源分享平台

常见问题
  • 模板团承诺演示效果图均和网站95%一样,并且我们的模板和数据都没有留后门,请放心使用。
查看详情
  • 因为模板具有可复制性和可传播性,模板一旦发货,非质量问题,不支持退换;所以务必请您一定看清楚后再购买。
查看详情

相关文章

评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务

  • 0 +

    访问总数

  • 0 +

    会员总数

  • 0 +

    资源总数

  • 0 +

    今日发布

  • 0 +

    本周发布

  • 0 +

    运行天数

开通会员,尊享海量资源下载特权