本文标签: DEDECMS
用dedecms建站会发现一个比较奇怪的问题,删除文章的时候不会将文章中所包含的图片删除,这样的话,无用的图片会越来越多,占用了宝贵的空间,怎么样在删除文章的时候自动将突破删除呢?解决dedecms的这个bug需要修改两个的文件
1、在include文件夹中extend.func.php 文件加入下面的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
function GetPicsTruePath($body,$litpic) //解析body数据,获得所有图片的绝对地址 { $delfiles = array();//存储图片地址数据 if(!empty($litpic)) { $litpicpath = GetTruePath(); $litpicpath .= $litpic; $delfiles[] = $litpicpath;//缩略图地址 } preg_match_all("/src=[\"|'|\S|\s]([^ |\/|>]*){0,}(([^>]*)\.(gif|jpg|png|jpeg|JPG|JPEG))/isU",$body,$tmpdata); $picspath = array_unique($tmpdata[2]);//body中所有图片的地址 foreach($picspath as $tmppath) { $path = GetTruePath();//获得绝对路径 $picpath = preg_replace("/[a-zA-z]+:\/\/[^ |\/|\s]*/",'',$tmppath);//去掉网址部分 $path .=$picpath; $delfiles[] = $path;//保存处理后的数据 } return $delfiles; } function WriteToDelFiles($msg)//删除文章的时候会通过此函数记录日志 { if(empty($msg)) $savemsg="未获得消息"; else $savemsg = $msg; $errorFile = dirname(__FILE__).'/../data/del_body_file.txt';//删除记录文件 $fp = @fopen($errorFile, 'a'); @fwrite($fp,"\r\n{$savemsg}"); @fclose($fp); } //获得文章Body数据 function GetArcBody($aid) { global $dsql; $query = "SELECT #@__addonarticle.body FROM #@__addonarticle WHERE #@__addonarticle.aid = '$aid'"; $row = $dsql->GetOne($query); if(is_array($row)) return $row; else return false; } |
2、打开dede/inc/inc_batchup.php 如果你修改过了管理目录,进入相应的目录中,打开这个文件
在54行左右,这段代码$arcRow = $dsql->GetOne($arcQuery);下面加入
1 |
$arcBodyRow = GetArcBody($aid); |
在83行左右加入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$willDelFiles = GetPicsTruePath($arcBodyRow['body'],$arcRow['litpic']); $nowtime = time(); $executetime = MyDate('Y-m-d H:i:s',$nowtime);//获得执行时间 $msg = "\r\n文章标题:$arcRow[title]"; WriteToDelFiles($msg); if(!empty($willDelFiles)) { foreach($willDelFiles as $file) { if(file_exists($file) && !is_dir($file)) { if(unlink($file)) $msg = "\r\n位置:$file\r\n结果:删除成功!\r\n时间:$executetime"; else $msg = "\r\n位置:$file\r\n结果:删除失败!\r\n时间:$executetime"; } else $msg = "\r\n位置:$file\r\n结果:文件不存!\r\n时间:$executetime"; WriteToDelFiles($msg); }//END foreach } else { $msg = "\r\n未在Body中解析到数据\r\nBody原始数据:$arcBodyRow[body]\r\n时间:$executetime"; WriteToDelFiles($msg); } |
OK,这样就可以将图片删除了,删除的日志可以访问data/del_body_file.txt这个文件查看。
声明: 本文由( liva )原创编译,转载请保留链接: dedecms 5.7 删除文章时如何将文章中的图片删除
dedecms 5.7 删除文章时如何将文章中的图片删除:目前有5 条留言
发表评论

咦,这个评论区的样式设计的很有感觉啊
2013-06-17 上午 10:39你的浏览器好高级。第一次听说w3m。
2013-06-17 下午 12:35linux下的一个字符浏览器
2013-06-18 下午 2:34果然没有wp的add_action方便啊
2013-06-17 上午 9:59dedecms还没有wordpress设计得那么完善,尤其是文章的管理和主题设计。
2013-06-17 下午 12:33