当前位置:网站首页 >  攻略

帝国CMS无效缓存文件零门槛批量删除 附安全一键清理PHP脚本

时间:2026年06月02日 10:51:00 来源:易频IT社区

前期准备

确认核心参数

先登录帝国CMS后台,找到系统设置-系统参数设置-附件设置,记录以下3个路径:

  • 附件存放目录:默认是/d/file/,如果自己修改过请务必记准绝对路径或相对根目录的路径
  • 附件附件表前缀:默认是phome_,记准这个前缀用于后续查询有效缓存的SQL过滤

备份必要文件

必须做2步备份,防止误删:

  1. 通过FTP工具(如FileZilla,下载地址:https://filezilla-project.org/download.php?type=client)或宝塔面板文件管理,将附件存放目录下的cache子文件夹压缩备份
  2. 登录数据库管理工具(如phpMyAdmin,宝塔面板默认自带),备份phome_ecms_attachment主附件表

方案一:宝塔面板/SSH手动筛选+删除(适合略懂服务器的用户)

步骤1:生成有效缓存文件列表(SQL导出)

登录phpMyAdmin,选择帝国CMS对应的数据库,点击左侧SQL标签,输入并执行以下SQL语句:

```sql SELECT CONCAT('/d/file/cache/', filepath, '/', filename) AS valid_cache_path FROM phome_ecms_attachment WHERE filepath LIKE 'cache/%'; ```

注意:如果附件目录或表前缀修改过,请替换语句中的/d/file/cache/phome_为自己的参数。执行后点击导出,格式选择CSV,勾选仅数据,取消所有其他勾选,保存为valid_cache.csv到本地。

步骤2:上传并运行对比清理脚本(PHP单文件)

将以下代码复制到本地编辑器,保存为del_invalid_cache.php,注意修改顶部的3个配置参数:

```php "; } } else { if (!isset($valid_files[$relative_path])) { unlink($full_path); echo "删除无效文件: {$relative_path}
"; } } } } // 3. 执行清理(建议先注释掉unlink和rmdir,打印日志确认无误后再取消) scan_and_delete($cache_dir, $valid_files); echo '
清理完成!请务必检查附件功能是否正常!'; ?> ```

通过FTP或宝塔文件管理,将valid_cache.csvdel_invalid_cache.php上传到帝国CMS的根目录(和index.php同级)。

帝国CMS无效缓存文件零门槛批量删除 附安全一键清理PHP脚本

安全预检:打开脚本代码,在unlink($full_path);rmdir($full_path);前面各加一行//注释掉,然后访问网站地址+/del_invalid_cache.php,确认打印的“删除”项都是陌生或旧的缓存。

确认无误后,删除那两行//取消注释,重新访问地址执行正式清理。

清理完成后,立即通过FTP或宝塔删除del_invalid_cache.phpvalid_cache.csv,防止被他人恶意访问。

方案二:纯后台友好一键脚本(无需FTP/数据库管理,适合纯小白)

将以下代码复制到本地编辑器,保存为safe_del_cache.php,不需要修改任何默认参数(自动读取帝国CMS配置):

```php fetch1("select userid,username,password,rnd from {$dbtbpre}enewsuser where userid='$userid'"); if($user['userid']&&$user['password']==$password&&$user['rnd']==$rnd) { $ecmscheck=1; } } db_close(); if(!$ecmscheck) { die('请先登录帝国CMS后台!'); } // 初始化配置 $cache_dir = ECMS_PATH.$public_r['fileurl'].'cache'; $prefix_removed = $public_r['fileurl'].'cache'; // 1. 从数据库获取有效缓存列表 $link=db_connect(); $empire=new mysqlquery(); $valid_files = []; $sql=$empire->query("select filepath,filename from {$dbtbpre}ecms_attachment where filepath like 'cache/%'"); while($r=$empire->fetch($sql)) { $relative_path = $r['filepath'].'/'.$r['filename']; $relative_path = substr($relative_path, 6); // 去掉开头的cache/ if(!empty($relative_path)) { $valid_files[$relative_path] = true; } } db_close(); // 2. 递归遍历对比删除(同样先注释删除代码预检) $delete_count = 0; $dir_count = 0; function scan_and_delete($dir, $valid_files, $current_prefix = '') { global $delete_count, $dir_count; $files = scandir($dir); foreach ($files as $file) { if ($file === '.' || $file === '..') continue; $full_path = $dir . '/' . $file; $relative_path = $current_prefix ? $current_prefix . '/' . $file : $file; if (is_dir($full_path)) { scan_and_delete($full_path, $valid_files, $relative_path); if (count(scandir($full_path)) === 2) { rmdir($full_path); $dir_count++; echo "删除空目录: {$relative_path}
"; } } else { if (!isset($valid_files[$relative_path])) { unlink($full_path); $delete_count++; echo "删除无效文件: {$relative_path}
"; } } } } // 3. 执行预检或正式清理 if ($_GET['action'] === 'do') { scan_and_delete($cache_dir, $valid_files); echo "
清理完成!共删除 {$delete_count} 个无效文件,{$dir_count} 个空目录。请删除本脚本!"; } else { echo '安全预检模式:
'; scan_and_delete($cache_dir, $valid_files); echo "

确认无误后,点击正式清理"; } ?> ```

上传到帝国CMS根目录,先登录后台保持登录状态,然后访问网站地址+/safe_del_cache.php进入安全预检,确认后点击“正式清理”按钮。

清理完成后立即删除脚本文件。

后期维护

可以每个月或在批量更新内容后,使用方案二的脚本快速清理一次,避免无效缓存占用服务器空间。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图