在DEDECMS 5.6中,删除文章的同时删除附件的方法如下:
1、修改include/extend.func.php文件:
打开/include
目录下的extend.func.php
文件。
在文件末尾添加以下三个函数:
“`php
// 解析body数据,获得所有图片的绝对地址
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;
}
// 获得文章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;
}
// 写入日志文件
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);
}
“`
2、修改dede/inc/inc_batchup.php文件:
打开/dede/inc/inc_batchup.php
文件。
在第33行下方(即$arcRow = $dsql>GetOne($arcQuery);
下方)添加以下代码:
“`php
$arcBodyRow = GetArcBody($aid);
“`
在第102行下方(即if (@is_file($filenameh)) @unlink($filenameh);
下方)添加以下代码:
“`php
// 解析Body中的资源,并删除
$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 . "r
结果:删除成功!r
时间:" . $executetime;
else $msg = "位置:" . $file . "r
结果:删除失败!r
时间:" . $executetime;
} else $msg = "位置:" . $file . "r
结果:文件不存!r
时间:" . $executetime;
WriteToDelFiles($msg);
} //END foreach
} else {
$msg = "未在Body中解析到数据r
Body原始数据:" . $arcBodyRow[‘body’] . "r
时间:" . $executetime;
WriteToDelFiles($msg);
}
“`
通过上述步骤,可以实现在DEDECMS 5.6中删除文章的同时删除其相关的附件和图片,以下是相关问答FAQs:
FAQs:
1、Q: 如果在删除过程中遇到权限问题怎么办?
A: 如果在执行删除操作时遇到权限问题,确保运行脚本的用户对目标文件和目录具有足够的权限,可以尝试使用chmod
命令修改文件权限,或者以管理员身份运行脚本。
2、Q: 如果需要保留某些特定的图片或附件,该如何修改代码?
A: 可以在GetPicsTruePath
函数中添加逻辑判断,根据特定条件排除不需要删除的图片或附件,可以通过检查图片的文件名或其他属性来决定是否将其加入删除列表。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1108831.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复