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

在DedeCMS中,删除文档时会自动删除文章中的图片。如果需要保留图片,请先备份。

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

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

在DedeCMS中,当用户删除文章时,通常只会删除文章的内容,而不会删除文章中引用的图片,这些图片会残留在服务器上,占用不必要的存储空间,为了解决这个问题,可以通过二次开发来实现删除文章的同时删除文章中的图片,以下是具体实现方法:

1. 创建或修改extend.func.php 文件

/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("/[azAz]+://[^ |/|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
{$savemsg}");
    @fclose($fp);
}

2. 修改inc_batchup.php 文件

打开/dede/inc/inc_batchup.php 文件,并在以下位置添加相应的代码:

在以下代码下方添加:

$arcRow = $dsql>GetOne($arcQuery);

添加:

$arcBodyRow = GetArcBody($aid);

在以下代码上方添加:

return true;

添加:

//解析Body中的资源,并删除
$willDelFiles = GetPicsTruePath($arcBodyRow['body'], $arcRow['litpic']);
$nowtime = time();
$executetime = MyDate('Ymd H:i:s', $nowtime); //获得执行时间
$msg = "r
文章$arcRow[title]";
WriteToDelFiles($msg);
if (!empty($willDelFiles)) {
    foreach ($willDelFiles as $file) {
        if (file_exists($file) && !is_dir($file)) {
            if (unlink($file)) {
                $msg = "r
位置:$filer
结果:删除成功!r
时间:$executetime";
            } else {
                $msg = "r
位置:$filer
结果:删除失败!r
时间:$executetime";
            }
        } else {
            $msg = "r
位置:$filer
结果:文件不存!r
时间:$executetime";
        }
        WriteToDelFiles($msg);
    } //END foreach
} else {
    $msg = "r
未在Body中解析到数据r
Body原始数据:$arcBodyRow[body]r
时间:$executetime";
    WriteToDelFiles($msg);
}

至此,全部修改完成,删除文章时,程序会分析Body中的图片地址,然后进行删除,并在/data/ 目录下生成日志记录文件del_body_file.txt

FAQs

Q1: 为什么需要手动删除文章中的图片?

A1: 织梦CMS默认情况下只删除文章内容,而不会删除文章中引用的图片,这会导致图片残留在服务器上,占用存储空间,影响系统性能,需要通过二次开发实现删除文章的同时删除文章中的图片。

Q2: 如何确保代码的安全性和有效性?

A2: 在实施上述修改之前,建议先备份相关文件,并在本地环境中进行测试,确保代码的正确性和安全性,定期检查和更新代码,以防止潜在的安全漏洞。

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

1. 准备工作

在开始操作之前,请确保您已经备份了网站的数据,以防操作失误导致数据丢失。

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

2. 登录DedeCMS后台

1、打开浏览器,输入您的DedeCMS管理地址。

2、输入管理员账号和密码,登录后台。

3. 查找并删除文档

1、进入“文档管理”模块。

2、找到需要删除的文档,点击“删除”按钮。

3、在弹出的确认框中,选择“是”,确认删除。

4. 删除文章中的图片

在删除文档的同时,您可能希望删除文章中引用的图片,以下是一些方法:

方法一:手动删除图片

1、进入“文章管理”模块。

2、找到包含需要删除图片的文章。

3、打开文章内容,手动删除所有图片链接和图片标签。

4、保存文章。

方法二:使用SQL语句删除图片

如果您熟悉SQL语句,可以执行以下步骤:

1、登录数据库管理工具(如phpMyAdmin)。

2、选择对应的数据库。

3、执行以下SQL语句(以article表为例):

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

UPDATE article SET
  content = REPLACE(content, '图片链接', ''),
  bodytext = REPLACE(bodytext, '图片链接', '')
WHERE aid = 文档ID;

注意:将'图片链接'替换为文章中实际图片的链接,将文档ID替换为要删除的文章ID。

方法三:使用DedeCMS插件

DedeCMS社区中有一些插件可以帮助您批量删除文章中的图片,您可以在DedeCMS后台的插件管理模块中查找并安装相应的插件。

5. 清理数据库

1、删除文档后,可能需要在数据库中清理相关的缓存和索引。

2、进入“系统设置”模块。

3、找到“清理数据库”选项。

4、点击“清理”按钮,清理数据库。

6. 验证删除结果

1、进入“文档管理”模块,确认文档已删除。

2、进入“文章管理”模块,查看文章内容,确认图片已被删除。

注意事项

在进行任何操作之前,请确保您已经备份了网站数据。

在执行SQL语句时,请谨慎操作,避免误删重要数据。

使用插件时,请确保插件来自可靠的来源,以避免安全风险。

是使用DedeCMS删除文档同时删除文章中图片的方法,希望能对您有所帮助。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1129005.html

(0)
未希的头像未希新媒体运营
上一篇 2024-10-02 16:23
下一篇 2024-10-02

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

免费注册
电话联系

400-880-8834

产品咨询
产品咨询
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入