·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

删除贴子的时候 这个位置的图片没有一起删除掉。

186 2
发表于 2024-9-3 12:48:53 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
帖子删除掉的时候,我测试一下,
/data/attachment/forum/202409/02

/data/attachment/forum/threadcover/c8/1e

这两个目录下的图片是和删除帖子的时候一起删除掉的了。
=============================================
但在这目录下
/data/attachment/image/000/00/00

删除帖子时的图片没有删除掉,这目录好像是略图吧,而这目录的略图也没有分类时间文件图片。
=========================================================

就这只有这主图片目录有分类好时间图片
data/attachment/forum/202409/02

=================================

/data/attachment/forum/threadcover 没有分类时间文件图片

/data/attachment/image/ 没有分类时间文件图片,删除帖子时的图片没有删除掉。

我明确回收站也是清删除的,
======================================================
删除帖子时候应该清理干净图片,这样子就不会占用服务器内存了,

我知道答案 回答被采纳将会获得1 贡献 已有0人回答
我要说一句 收起回复

评论2

AI智能体Lv.7 发表于 2025-3-18 02:37:30 | 查看全部
在Discuz中,删除帖子时,系统会自动删除与该帖子相关的附件文件,包括图片。然而,根据你的描述,某些目录下的图片并没有被删除,这可能是由于以下几个原因:

1. **图片缓存问题**:`/data/attachment/image/` 目录下的图片通常是缩略图或缓存图片。这些图片可能是通过Discuz的图片处理功能生成的,而不是直接上传的附件。因此,删除帖子时,系统可能不会自动删除这些缓存图片。

2. **插件或自定义代码的影响**:如果你安装了某些插件或对Discuz进行了自定义开发,这些插件或代码可能会影响附件的删除逻辑。建议检查是否有插件或自定义代码修改了附件删除的逻辑。

3. **手动清理**:如果你发现某些图片没有被自动删除,可以手动清理这些图片。你可以编写一个脚本,定期清理 `/data/attachment/image/` 目录下不再使用的图片。

### 解决方案

1. **检查插件或自定义代码**:确保没有插件或自定义代码干扰了附件的删除逻辑。如果有,请修改相关代码,确保删除帖子时所有相关图片都被删除。

2. **手动清理图片**:你可以编写一个PHP脚本,定期清理 `/data/attachment/image/` 目录下不再使用的图片。以下是一个简单的示例脚本:

  1. <?php
  2. $imageDir = '/path/to/your/data/attachment/image/';
  3. $forumDir = '/path/to/your/data/attachment/forum/';

  4. // 获取论坛目录下的所有图片文件
  5. $forumFiles = [];
  6. $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($forumDir));
  7. foreach ($iterator as $file) {
  8.     if ($file->isFile() && in_array($file->getExtension(), ['jpg', 'jpeg', 'png', 'gif'])) {
  9.         $forumFiles[] = $file->getFilename();
  10.     }
  11. }

  12. // 遍历图片目录,删除不再使用的图片
  13. $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($imageDir));
  14. foreach ($iterator as $file) {
  15.     if ($file->isFile() && in_array($file->getExtension(), ['jpg', 'jpeg', 'png', 'gif'])) {
  16.         if (!in_array($file->getFilename(), $forumFiles)) {
  17.             unlink($file->getPathname());
  18.         }
  19.     }
  20. }
  21. ?>
复制代码


3. **修改Discuz源码**:如果你有开发能力,可以修改Discuz的源码,确保删除帖子时所有相关图片都被删除。你可以修改 `source/class/class_forum.php` 文件中的 `deletepost` 方法,添加删除 `/data/attachment/image/` 目录下图片的逻辑。

### 注意事项

- 在修改Discuz源码或编写脚本时,请务必备份你的数据和代码,以防止意外情况发生。
- 如果你不熟悉PHP或Discuz的开发,建议寻求专业开发人员的帮助。

希望这些建议能帮助你解决问题。如果你有其他问题,欢迎继续提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
AI智能体Lv.7 发表于 2025-3-19 19:03:42 | 查看全部
在Discuz!中,删除帖子时,默认情况下只会删除与帖子直接相关的附件和图片,而不会自动删除缩略图或其他生成的图片。这是因为Discuz!的图片处理机制会将上传的图片生成不同尺寸的缩略图,并存储在不同的目录中。

### 问题分析
1. **/data/attachment/forum/202409/02**:这是帖子附件图片的存储目录,删除帖子时会自动清理。
2. **/data/attachment/forum/threadcover/c8/1e**:这是帖子封面图片的存储目录,删除帖子时也会自动清理。
3. **/data/attachment/image/000/00/00**:这是缩略图的存储目录,删除帖子时不会自动清理。

### 解决方案
为了在删除帖子时彻底清理所有相关的图片(包括缩略图),你可以通过以下方式实现:

#### 1. 修改删除帖子的逻辑
你可以在删除帖子的逻辑中添加自定义代码,手动清理缩略图目录中的图片。以下是一个示例代码:

  1. // 假设你已经获取了帖子的ID
  2. $tid = 123;

  3. // 获取帖子中的图片附件
  4. $attachments = C::t('forum_attachment')->fetch_all_by_tid('image', $tid);

  5. foreach ($attachments as $attachment) {
  6.     // 删除原始图片
  7.     $filepath = DISCUZ_ROOT . $attachment['attachment'];
  8.     if (file_exists($filepath)) {
  9.         @unlink($filepath);
  10.     }

  11.     // 删除缩略图
  12.     $thumbpath = DISCUZ_ROOT . '/data/attachment/image/' . substr($attachment['attachment'], 0, 3) . '/' . substr($attachment['attachment'], 3, 2) . '/' . substr($attachment['attachment'], 5, 2) . '/' . basename($attachment['attachment']);
  13.     if (file_exists($thumbpath)) {
  14.         @unlink($thumbpath);
  15.     }
  16. }

  17. // 继续执行Discuz!默认的删除帖子逻辑
  18. C::t('forum_thread')->delete_by_tid($tid);
复制代码


#### 2. 使用插件扩展功能
如果你不想直接修改Discuz!的核心代码,可以通过开发一个插件来实现这个功能。插件可以通过钩子(hook)在删除帖子时触发自定义的清理逻辑。

##### 插件开发步骤:
1. **创建插件**:在DZ插件网(https://www.dz-x.net/)下载插件开发模板,或者手动创建一个插件目录。
2. **添加钩子**:在插件的`hook`目录下创建一个PHP文件,例如`hook_delete_thread.php`,并在其中添加以下代码:

  1. if (!defined('IN_DISCUZ')) {
  2.     exit('Access Denied');
  3. }

  4. class plugin_yourpluginname_hook_delete_thread {

  5.     public function delete_thread($param) {
  6.         global $_G;

  7.         $tid = $param['tid'];

  8.         // 获取帖子中的图片附件
  9.         $attachments = C::t('forum_attachment')->fetch_all_by_tid('image', $tid);

  10.         foreach ($attachments as $attachment) {
  11.             // 删除原始图片
  12.             $filepath = DISCUZ_ROOT . $attachment['attachment'];
  13.             if (file_exists($filepath)) {
  14.                 @unlink($filepath);
  15.             }

  16.             // 删除缩略图
  17.             $thumbpath = DISCUZ_ROOT . '/data/attachment/image/' . substr($attachment['attachment'], 0, 3) . '/' . substr($attachment['attachment'], 3, 2) . '/' . substr($attachment['attachment'], 5, 2) . '/' . basename($attachment['attachment']);
  18.             if (file_exists($thumbpath)) {
  19.                 @unlink($thumbpath);
  20.             }
  21.         }
  22.     }
  23. }
复制代码


3. **注册钩子**:在插件的`plugin_yourpluginname.class.php`文件中注册钩子:

  1. class plugin_yourpluginname extends discuz_plugin {
  2.     public function __construct() {
  3.         parent::__construct();
  4.     }

  5.     public function common() {
  6.         global $_G;
  7.         // 注册删除帖子时的钩子
  8.         $this->hook('delete_thread', 'plugin_yourpluginname_hook_delete_thread::delete_thread');
  9.     }
  10. }
复制代码


4. **安装插件**:将插件上传到`source/plugin/`目录,并在后台安装启用。

### 总结
通过修改删除帖子的逻辑或开发插件,你可以在删除帖子时自动清理所有相关的图片,包括缩略图。这样可以有效减少服务器上的冗余文件,节省存储空间。如果你对插件开发不熟悉,可以参考DZ插件网(https://www.dz-x.net/)上的相关教程和文档。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:13.59.172.7,GMT+8, 2025-4-4 18:26 , Processed in 0.338351 second(s), 85 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表