在DedeCMS中,删除文档的同时删除文章中的图片是一项非常实用的功能,这不仅有助于节省服务器空间,还能避免手动清理无用图片的麻烦,以下是实现这一功能的详细步骤和相关代码示例:
第一步:创建extend.func.php文件
1、创建文件:在/include
目录下创建一个名为extend.func.php
的文件。
2、编写函数:将以下内容保存到extend.func.php
文件中,这些函数用于解析文章的body数据,获得所有图片的绝对地址,并记录日志。
// 解析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); }
第二步:修改inc_batchup.php文件
1、打开文件:找到并打开/dede/inc/inc_batchup.php
文件。
2、添加代码:在$arcRow = $dsql>GetOne($arcQuery);
下方添加以下代码:
$arcBodyRow = GetArcBody($aid);
3、继续添加代码:在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 位置:" . $file . "r 结果:删除成功!r 时间:" . $executetime; } else { $msg = "r 位置:" . $file . "r 结果:删除失败!r 时间:" . $executetime; } } else { $msg = "r 位置:" . $file . "r 结果:文件不存!r 时间:" . $executetime; } WriteToDelFiles($msg); } // END foreach } else { $msg = "r 未在Body中解析到数据r Body原始数据:" . $arcBodyRow['body'] . "r 时间:" . $executetime; WriteToDelFiles($msg); }
FAQs
Q1: 如何验证是否成功删除了文章及其图片?
A1: 你可以通过查看位于/data/
目录下的日志文件del_body_file.txt
来验证删除操作的结果,该文件会记录每次删除操作的详细信息,包括文章标题、图片路径、删除结果及时间。
Q2: 如果在删除过程中遇到图片无法删除的情况怎么办?
A2: 如果某个图片文件无法删除,可能是由于权限问题或文件被占用,你可以检查文件的权限设置,确保PHP进程有权限删除该文件,如果问题依然存在,可以尝试手动删除该文件或者联系系统管理员解决。
步骤 | 操作 | 说明 |
1 | 打开DedeCMS后台管理 | 登录到DedeCMS后台,找到文档管理模块。 |
2 | 选择文档 | 在文档列表中找到需要删除的文档,点击选择。 |
3 | 编辑文档 | 点击“编辑”按钮,进入文档编辑页面。 |
4 | 选中图片 | 在文档内容中找到需要删除的图片,点击选中。 |
5 | 删除图片 | 按住鼠标左键,拖动图片到回收站或者右键点击图片选择“删除”。 |
6 | 保存文档 | 点击“保存”按钮,保存对文档所做的修改。 |
7 | 删除文档 | 返回文档列表页面,选中该文档,点击“删除”按钮。 |
8 | 确认删除 | 在弹出的确认窗口中选择“确定”,确认删除文档。 |
9 | 删除图片 | 在删除文档的同时,系统会自动删除文档中引用的所有图片。 |
10 | 完成操作 | 文档及其中的图片已经被成功删除。 |
步骤是基于DedeCMS后台操作的通用指南,具体操作可能因DedeCMS版本或配置的不同而有所差异。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1206002.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复