Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[发布] 节省论坛空间--清理多余无用的附件!!

[复制链接]
逍x遥y 发表于 2006-3-13 23:48:23 | 显示全部楼层 |阅读模式
节省论坛空间--清理多余无用的附件


帖子被删,但不知道其帖子里的附件是否也同样清理,用用这个吧!!!

使用方法:把这段代码保存为一个php文件,文件名任意,也可以下载附件,上传到论坛根目录执行即可。为了安全,使用前请先备份资料,希望对朋友你有用!

原文修改自:http://www.alan888.com/Discuz/viewthread.php?tid=60540
原文是繁体难识别的文字,我改为简体中文!!

适用版本:DZ4.0 和 DZ4.1.0
  1. <?php
  2. /*
  3. Discuz!清理多余的附件
  4. */

  5. ob_start();
  6. session_start();
  7. $pertask=600;//每次处理的文件数,你可以根据情况更改

  8. require_once './include/common.inc.php';
  9. //身份检查
  10. if($adminid!=1)
  11.   exit('对不起,只有管理员才可以执行此操作!');
  12.   
  13. //利用session保存已清理文件列表??
  14. if(!session_is_registered("delfiles")){
  15.   session_register("delfiles");
  16.   $delfiles=array();
  17. }

  18. if ($begin==NULL) $begin=0;
  19. $end=$begin+$pertask;
  20. //列目录,取得文件列表??
  21. $array=list_dir($attachdir);
  22. if ($end>count($array)) $end=count($array);

  23. //=================================================================
  24. for ($i=$begin; $i<$end; $i++){
  25.   $search=str_replace("$attachdir/","",$array[$i]);
  26.   //搜索文件是否在资料库中存在??
  27.   $result=$db->query("SELECT attachment FROM {$tablepre}attachments where attachment="$search"");
  28.   if (!$attach = $db->fetch_array($result)){
  29.           @unlink($array[$i]);//清理文件。你可先注释掉这句,不执行清理操作,只显示多余的附件          $delfiles[]=$search;//保留已清理文件名,以作输出?
  30.     }
  31. }
  32. //=================================================================

  33. if ($end<count($array)){
  34.   echo "已处理文件数:".$end."<br>";
  35.   $nextlink=$_SERVER['PHP_SELF']."?begin=".$end;
  36.   echo "<meta http-equiv="refresh" content="1;URL=".$nextlink."">";
  37.   echo "<a href="".$nextlink."">程式将自动继续或单击这里?...</a>";
  38. }
  39. else {
  40.     $count=count($delfiles);
  41.     if ($count>0){
  42.     echo "找到多余附件共".$count."个,已清理,被清理文件如下:<hr>";
  43.     foreach($delfiles as $value)
  44.         echo "$value<br>";
  45.   }
  46.   else
  47.     echo "没找到多余的附件";
  48.   session_destroy();
  49. }
  50. ?>



  51. <?php
  52. //列目录
  53. function list_dir($dirname)
  54. {
  55.         static $result_array=array();   //静态阵列,保存函数返回值。???
  56.         $handle=opendir($dirname);
  57.         while ($file = readdir($handle))
  58.         {
  59.                 if($file=='.'||$file=='..'||$file=='index.htm')
  60.                         continue;
  61.                 if(is_dir("$dirname/$file"))
  62.                         list_dir("$dirname/$file");  //如果是目录,递迴调用。
  63.                 else
  64.                         $result_array[]="$dirname/$file";
  65.         }
  66.         closedir($handle);
  67.         return $result_array;
  68. }
  69. ?>
复制代码

[ 本帖最后由 逍x遥y 于 2006-3-13 23:54 编辑 ]

本帖子中包含更多资源

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

x
hklcf 发表于 2006-3-13 23:49:02 | 显示全部楼层
第一
回复

使用道具 举报

hybbq 发表于 2006-3-14 00:11:42 | 显示全部楼层
占位...
回复

使用道具 举报

肯得基 发表于 2006-3-14 00:17:04 | 显示全部楼层
这个东西不错
回复

使用道具 举报

 楼主| 逍x遥y 发表于 2006-3-14 00:19:00 | 显示全部楼层
原帖由 砸死牛顿的苹果 于 2006-3-14 00:15 发表

帖子被删,但不知道其帖子里的附件是否也同样清理,用用这个吧!!!
回复

使用道具 举报

yren455 发表于 2006-3-14 00:51:56 | 显示全部楼层
去试试
回复

使用道具 举报

ywxs 发表于 2006-3-14 01:15:11 | 显示全部楼层
原帖由 砸死牛顿的苹果 于 2006-3-14 00:52 发表

楼主已经说清楚了,保存为php文件,文件名任意,然后上传论坛跟目录,在浏览器运行。
回复

使用道具 举报

bonusboy29 发表于 2006-3-14 07:36:25 | 显示全部楼层
能不能做成在后台只有管理员可以用的插件  这样方便了大家  

再加一句 有谁测试过了 成功了嘛  有点怕呀
回复

使用道具 举报

温馨阁 发表于 2006-3-14 08:25:34 | 显示全部楼层
支持下,观望一下
回复

使用道具 举报

 楼主| 逍x遥y 发表于 2006-3-14 09:08:40 | 显示全部楼层
原帖由 砸死牛顿的苹果 于 2006-3-14 00:52 发表

传到论坛根目录后,在浏览器输入地址
如:http://www.0amv.cn/上传的文件名
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-15 15:28 , Processed in 0.028384 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表