网络建站知识发布于分享网站

当前位置:首页>>新闻中心>>CMS教程>>dedecms教程

Dedecms 删除文档时同时删除文章中图片的方法

时间:2025-03-30 11:10:10    来源:    人气:0

在使用 Dedecms 管理内容时,删除文档的同时自动清理文章中的图片是一项非常实用的功能。本文将详细介绍如何实现这一功能,帮助您优化网站资源管理流程。


首先,在 Dedecms 的“/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, "\\r\\n{$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 = "\\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);
    }
} else {
    $msg = "\\r\\n未在 Body 中解析到数据\\r\\nBody 原始数据:$arcBodyRow[body]\\r\\n时间:$executetime";
    WriteToDelFiles($msg);
}
        

完成以上修改后,当您删除文章时,程序会自动分析文章 Body 中的图片地址并将其删除。同时,系统会在“/data/”目录下生成日志文件“del_body_file.txt”,记录删除操作的具体信息。


通过上述方法,您可以有效减少服务器上的冗余文件,提高资源利用率,同时为 SEO 提供更清晰的站点结构。

相关文章

  • Dedecms 删除文档时同时清除文章中图片的方法

    Dedecms 删除文档时同时清除文章中图片的方法

    在网站建设与维护的过程中,优化代码结构和功能是提升网站性能的重要步骤。本文将介绍如何通过自定义函数实现文章删除时自动清理相关资源的功能,从而提高系统的整洁性和存储效率。以下是具体的操作步骤及代码实现。首先, 在 `/include` 目录下创建一个名为 `extend.func.php` 的文件...
    2025-03-31
  • Dedecms上传图片提示302错误ERROR的解决方法

    Dedecms上传图片提示302错误ERROR的解决方法

    在进行图片上传操作时,用户可能会遇到302错误以及带有ERROR提示的图片上传失败问题。这些问题可能由多种原因引发,因此本文将对这些情况进行整理,以帮助大家更有效地定位并解决问题。 第一种情况:图片文件本身损坏。 这种情况会导致系统返回ERROR错误提示,不过发生概率较低。如果怀疑是图片损坏导致的...
    2025-03-31
  • DEDECMS模板使用教程

    DEDECMS模板使用教程

    如果您正在寻找一种高效的方法来使用Dedecms模板搭建网站或论坛,那么本文将为您提供详尽的指导。从模板解压到最终完成配置,每一步都将清晰呈现,帮助您快速掌握整个流程。 第一步:解压Dedecms模板 将下载的Dedecms模板文件解压出来,确保所有文件完整无误。如下图所示: 第二步:获取D...
    2025-03-31
  • Dedecms Dede 附加表自定义字段与主表文章关联方法

    Dedecms Dede 附加表自定义字段与主表文章关联方法

    在使用DedeCMS开发装修网站时,设计师和设计作品之间的关联是一个重要的功能需求。通常情况下,文章(作品)的内容部分存储在主表dede_addonarticle中,而自定义字段则存储在附加表dede_archives中。为了实现这一功能,可以采用以下两种方法。 ① 根据发布人调用相关文章; ...
    2025-03-31

公众号