TGA是一种不常用的图片格式,在网站中几乎不需要,因此这个需求很合理,最安全、最推荐的方法是修改DedeCMS的源代码,而不是使用有风险的第三方插件。

下面我将为您提供两种修改方法,强烈推荐第一种。
修改 include/helpers/upload.helper.php 文件(最推荐)
这是最标准、最安全的方法。upload.helper.php 是DedeCMS处理所有文件上传的核心文件,在这里修改可以确保无论是后台还是前台(如果有相关功能)的上传都会生效。
操作步骤:
-
备份文件 在进行任何修改之前,请务必备份您的网站文件,特别是
include/helpers/upload.helper.php,以防修改出错可以快速恢复。 -
找到核心代码 使用FTP或主机管理面板,找到并打开
include/helpers/upload.helper.php文件,找到名为UploadFile的类,然后找到GetFileType()和Save()这两个方法。
(图片来源网络,侵删) -
添加自定义删除代码 我们需要在文件成功保存之后,但函数返回结果之前,进行格式判断和删除操作。
在
UploadFile类的Save()方法中,找到类似这样的代码(不同版本DedeCMS可能略有差异,但逻辑一致):// ... 上传和保存文件的代码 ... // 移动文件到最终目录 $this->moveFile($originFilename, $this->filePath); // ... 其他处理代码 ... // 返回成功信息 return $this->GetFileType($this->filePath);
在
return $this->GetFileType($this->filePath);这一行之前,插入我们自定义的代码。 -
插入代码 在
return语句之前,添加以下PHP代码:
(图片来源网络,侵删)// ========================================================== // 自定义代码:检查并删除 TGA 格式的文件 // 作者:AI助手 // 说明:如果上传的文件是 .tga 或 .TGA 格式,则立即删除。 // ========================================================== $file_extension = strtolower($this->fileExt); // 获取文件后缀名并转为小写 if ($file_extension == 'tga') { // 如果文件存在,则删除 if (file_exists($this->filePath)) { @unlink($this->filePath); // (可选) 可以在这里记录日志,方便排查问题 // $log_message = date('Y-m-d H:i:s') . " - 自动删除TGA文件: " . $this->filePath . "\n"; // @file_put_contents(DEDEDATA.'/tga_delete_log.txt', $log_message, FILE_APPEND); } // 返回一个空字符串,表示文件无效,或者你也可以返回一个错误信息 // return ''; } // ========================================================== -
保存文件 保存修改后的
upload.helper.php文件。
效果说明:
当您在DedeCMS后台(或其他使用此上传逻辑的地方)上传任何 .tga 或 .TGA 格式的文件时,系统会:
- 正常接收并临时保存文件。
- 将文件移动到指定目录。
- 在返回上传结果前,检测到文件后缀是
tga。 - 立即调用
unlink()函数将该文件从服务器上删除。 - 您会得到一个“上传成功”的提示,但实际上服务器上并没有这个文件,实现了“自动消失”的效果。
修改 dede/archives_add.php 文件(仅限文章上传)
如果您只想在发布文章时实现这个功能,并且不想修改核心上传类,可以只修改文章添加处理文件 dede/archives_add.php。
操作步骤:
-
备份文件 备份
dede/archives_add.php。 -
找到图片处理代码 在
archives_add.php文件中,找到处理文章内容(body)图片上传的代码段,通常在保存文章信息之前,会有一个循环处理litpic(缩略图)和body中的图片的循环。寻找类似
UploadAll函数调用的地方,或者处理$body变量的代码。 -
添加自定义删除代码 在图片上传成功后,对其进行遍历和判断,通常会有一个
foreach循环。假设您找到了类似这样的代码(伪代码):
// ... 处理文章内容中的图片 ... $body = HtmlReplace($body, -1, 0, 0, 0, 0, 0, $litpic); // 处理内容,提取图片 // ... 其他处理 ...
更精确的位置,是在
UploadAll函数执行之后,或者UploadFile类实例化并调用Save()方法之后。在图片上传成功、路径被获取之后,添加判断逻辑,在处理缩略图的代码附近,或者在处理文章正文中每个图片的循环里:
// 假设 $litpic 是缩略图的路径 if (!empty($litpic)) { $tga_check = strtolower(substr(strrchr($litpic, "."), 1)); if ($tga_check == 'tga') { @unlink($litpic); $litpic = ''; // 清空缩略图路径,防止存入数据库 } } // 假设 $body_images 是一个包含所有文章图片路径的数组 foreach ($body_images as $key => $img_path) { $tga_check = strtolower(substr(strrchr($img_path, "."), 1)); if ($tga_check == 'tga') { @unlink($img_path); // 从文章内容中移除这个图片标签(这个比较复杂,需要正则替换) // $body = preg_replace('/<img\s+[^>]*src="'.$img_path.'"[^>]*>/i', '', $body); unset($body_images[$key]); // 从数组中移除 } }这个方法相对复杂,需要针对您具体的代码位置进行调整,并且处理文章内容中的图片标签移除会更麻烦。
效果说明:
这种方法只对“发布文章”这个特定场景有效,如果您在“图集”或其他功能中也上传TGA文件,它将不会被删除。方法一是更通用、更彻底的解决方案。
总结与建议
| 特性 | 方法一 (修改 upload.helper.php) |
方法二 (修改 archives_add.php) |
|---|---|---|
| 通用性 | 高,影响所有使用DedeCMS上传功能的地方 | 低,仅限修改的特定页面(如文章发布) |
| 安全性 | 高,修改核心文件,逻辑清晰 | 中等,修改业务逻辑文件,可能与其他代码冲突 |
| 维护性 | 好,一次修改,全局生效 | 差,如果DedeCMS升级,可能需要重新修改 |
| 复杂度 | 低,只需在固定位置插入几行代码 | 高,需要定位具体业务逻辑,处理更复杂 |
强烈建议您使用方法一,它更符合软件工程的最佳实践,一劳永逸,且对系统稳定性影响最小。
最后再次提醒:操作前备份文件!
