在网站建设与维护的过程中,优化代码结构和功能是提升网站性能的重要步骤。本文将介绍如何通过自定义函数实现文章删除时自动清理相关资源的功能,从而提高系统的整洁性和存储效率。以下是具体的操作步骤及代码实现。 首先,
在 `/include` 目录下创建一个名为 `extend.func.php` 的文件。
接着,将以下三个函数保存到该文件中:

// 解析 body 数据,获取所有图片的真实地址
function GetPicsTruePath($body, $litpic) {
    $delfiles = array(); // 存储图片地址数据
    if (!empty($litpic)) {
        $litpicpath = GetTruePath();
        $litpicpath .= $litpic;
        $delfiles[] = $litpicpath; // 缩略图地址
    }
    preg_match_all("/src=["|'|S|s]([^ title="liehuo.net" |/|>]*){0,}(([^>]*).(gif|jpg|png))/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;
}

// 获取文章 Body 数据
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;
    }
}

// 写入日志文件
function WriteToDelFiles($msg) { // 删除文章时通过此函数记录日志
    if (empty($msg)) {
        $savemsg = "未获得消息";
    } else {
        $savemsg = $msg;
    }
    $errorFile = dirname(__FILE__) . '/../data/del_body_file.txt'; // 删除记录文件
    $fp = @fopen($errorFile, 'a');
    @fwrite($fp, "
{$savemsg}");
    @fclose($fp);
}

接下来,
打开 `/dede/inc/inc_batchup.php` 文件,并进行如下修改:
1. 在第 33 行下方(即 `$arcRow = $dsql->GetOne($arcQuery);` 下方)添加以下代码:
`$arcBodyRow = GetArcBody($aid);` 2. 在第 138 行下方(即 `return true;` 上方)添加以下代码:

// 解析 Body 中的资源,并删除
$willDelFiles = GetPicsTruePath($arcBodyRow['body'], $arcRow['litpic']);
$nowtime = time();
$executetime = MyDate('Y-m-d 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);
}

通过以上操作,您可以确保在删除文章时,系统能够自动清理相关的图片资源,并记录详细的日志信息。这种方法不仅减少了存储空间的浪费,还提高了数据库的整洁性,为后续的数据管理和维护提供了便利。
此外,记得定期检查日志文件,以便及时发现并解决可能存在的问题。