上一篇
如何在DEDECMS中实现删除文章时同时删除关联的附件和图片?
- 行业动态
- 2024-10-21
- 1
在DEDECMS中删除文章时,系统默认不会自动删除附件和图片。需要手动删除或通过编写代码实现。
在DedeCMS中,删除文章时同时删除附件和图片是一项非常实用的功能,这不仅有助于节省服务器空间,还能避免不必要的文件积累,以下将详细介绍如何实现这一功能:
一、修改/include/extend.func.php文件
1、添加获取图片路径的函数:
打开/include/extend.func.php
文件,在最后加入如下代码:
function GetPicsTruePath($body,$litpic) { $delfiles = array(); //存储图片地址数据 if(!empty($litpic)) { $litpicpath = GetTruePath(); $litpicpath .= $litpic; $delfiles[] = $litpicpath; //缩略图地址 } preg_match_all("/src=["|'|S|s]([^ |/|>]*){0,}(([^>]*).(gif|jpg|png))/isU",$body,$tmpdata); $picspath = array_unique($tmpdata[2]); //body中所有图片的地址 foreach($picspath as $tmppath) { $path = GetTruePath(); //获得绝对路径 $picpath = preg_replace("/[azAz]+://[^ |/|s]*/",'',$tmppath); //去掉网址部分 $path .=$picpath; $delfiles[] = $path; //保存处理后的数据 } return $delfiles; }
2、添加获取文章Body数据的函数:
继续在/include/extend.func.php
文件中添加如下代码:
function GetArcBody($aid) { global $dsql; $query = "SELECT dede_addonarticle.body FROM dede_addonarticle WHERE dede_addonarticle.aid = '$aid'"; $row = $dsql>GetOne($query); if(is_array($row)) return $row; else return false; }
3、添加删除文章时记录日志的函数:
在/include/extend.func.php
文件中添加如下代码:
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 {$savemsg}"); @fclose($fp); }
二、修改/dede/inc/inc_batchup.php文件
1、获取文章Body数据:
打开dede/inc/inc_batchup.php
文件,找到:
$arcRow = $dsql>GetOne($arcQuery);
在这句代码下边添加:
$arcBodyRow = GetArcBody($aid);
2、解析Body中的资源并删除:
继续在dede/inc/inc_batchup.php
文件中添加如下代码:
$willDelFiles = GetPicsTruePath($arcBodyRow['body'],$arcRow['litpic']); $nowtime = time(); $executetime = MyDate('Ymd H:i:s',$nowtime); //获得执行时间 $msg = " 文章标题:$arcRow[title]"; WriteToDelFiles($msg); if(!empty($willDelFiles)) { foreach($willDelFiles as $file) { if(file_exists($file) && !is_dir($file)) { if(unlink($file)) $msg = " 位置:$file 结果:删除成功! 时间:$executetime"; else $msg = " 位置:$file 结果:删除失败! 时间:$executetime"; } else $msg = " 位置:$file 结果:文件不存! 时间:$executetime"; WriteToDelFiles($msg); } } else { $msg = " 未在Body中解析到数据 Body原始数据:$arcBodyRow[body] 时间:$executetime"; WriteToDelFiles($msg); }
通过以上步骤,可以实现在DedeCMS中删除文章的同时,自动删除文章中的图片和附件,这不仅能节省服务器空间,还能提高网站的管理效率,在实际操作过程中,请确保对相关文件进行备份,以防出现意外情况。
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:http://www.xixizhuji.com/fuzhu/162015.html