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. 准备工作
在开始操作之前,请确保您已经备份了网站的数据,以防操作失误导致数据丢失。
2. 登录DedeCMS后台
1、打开浏览器,输入您的DedeCMS管理地址。
2、输入管理员账号和密码,登录后台。
3. 查找并删除文档
1、进入“文档管理”模块。
2、找到需要删除的文档,点击“删除”按钮。
3、在弹出的确认框中,选择“是”,确认删除。
4. 删除文章中的图片
在删除文档的同时,您可能希望删除文章中引用的图片,以下是一些方法:
方法一:手动删除图片
1、进入“文章管理”模块。
2、找到包含需要删除图片的文章。
3、打开文章内容,手动删除所有图片链接和图片标签。
4、保存文章。
方法二:使用SQL语句删除图片
如果您熟悉SQL语句,可以执行以下步骤:
1、登录数据库管理工具(如phpMyAdmin)。
2、选择对应的数据库。
3、执行以下SQL语句(以article表为例):
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
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复