公告:如果您的账号不能登录,可能是系统对您账号进行了保护,我们发现系统中存在着不安全密码,故对其重置,请您重新激活账号,对于给您造成的不便,敬请谅解!
论坛风格切换切换到宽版
  • 18154阅读
  • 18回复

[分享]DedeCms删除系统遗留图片,给需要的朋友(原创) [复制链接]

上一主题 下一主题
离线windcontrail
 
发帖
17
贡献值
0
威望值
25
技术分
0
织梦币
0
只看楼主 倒序阅读 使用道具 0 发表于: 2008-10-13
— 本帖被 木耳 设置为精华(2008-10-31) —
网站做好了,但由于都是采集的数据,其中难免有些不需要或者过时的内容,但在删除图片是DEDE并不能帮我们删除其中的附带的图片,导致遗留的图片在系统中越来越多,也用不到,变成了系统垃圾,对于空间不足的朋友更是麻烦,如果数据量较小时可以删除手动删除,但当数据量大时就有些力不从心了。

我不懂PHP编程,但有别的语言的基础,拼拼凑凑写了一个可以用的批量处理遗留图片的代码。

dede\templets\content_batch_up2.htm

找到下面代码:

<input class="np" type="radio" checked="checked" name="action" value="modddpic" /><br />
更正缩图错误<br />
<input class="np" type="radio" name="action" value="delerrdata" /><br />
清空错误的文档数据</td>

修改成:

<input class="np" type="radio" checked="checked" name="action" value="modddpic" /><br />
更正缩图错误<br />
<input class="np" type="radio" name="action" value="delerrdata" /><br />
清空错误的文档数据<br />
<input class="np" type="radio" name="action" value="delerrpic" /><br />
清空错误的图片</td>



dede\content_batchup_action2.php

在最后一个大括号后增加

elseif($action == 'delerrpic')
{
$file_a=array();
function rFile($p){
  global $file_a;
  $handle=opendir($p);
  $dir_a=array();
  while ($file = readdir($handle)) {
   if($file!="." && $file!=".."){
    $tmp=$p."/".$file;
    if(is_dir($tmp)){
     $dir_a[count($dir_a)]=$tmp;
    }elseif(is_file($tmp)){
     $file_a[count($file_a)]=$tmp;
    }
   }
  }
  closedir($handle);
  foreach($dir_a as $v){
   rFile($v);
  }
}
rFile("../uploads/allimg");//调用,要遍历的目录
foreach($file_a as $v){
  $temp=substr($v,2);
  $query = "select count(*) from #@__addonarticle where body like '%".$temp."%'";
  $dsql->setquery($query);
  $dsql->execute();
  while($row = $dsql->getarray())
  {
   if($row[0]==0){
    if(substr($v, -8, 4)!="_lit" && substr($v, -10, 5)!="index"){
     if(file_exists($v))
      unlink($v);
    }
   }
  
  }
}
$dsql->Close();
ShowMsg("成功清除错误图片!","javascript:;");
exit();
}

操作演示如下:


操作前dede的图片


操作前文件夹的图片


操作后文件夹的图片




就可以了,系统没有使用多线程处理的功能,当遗留图片较多时需要较长时间的等待,程序不删除缩略图和uploads/allimg目录下的index.html,如果uploads/allimg文件夹下有多余图片请修改程序后再用,这里贴出代码也是对DEDECMS产品的感谢。感谢在遇到问题时论坛热心的回答,不过只回答过我一次。。。。希望DEDECMS也越做越好,越来越强大。

如看不见图片可以到我的站点:http://www.agilesite.cn/blogs/show/16
[ 此帖被windcontrail在2008-10-13 13:30重新编辑 ]
1条评分
玩家 威望值 +5 感谢共享 2008-10-13
离线lrichie
发帖
371
贡献值
-1
威望值
179
技术分
0
织梦币
0
只看该作者 1 发表于: 2008-10-13
用户被禁言,该主题自动屏蔽!
[ 此帖被lrichie在2008-10-13 15:29重新编辑 ]
 
离线萧湘月

发帖
6723
贡献值
5296
威望值
1494
技术分
10
织梦币
45
只看该作者 2 发表于: 2008-10-13
  
 
离线玩家

发帖
2565
贡献值
64
威望值
1049
技术分
0
织梦币
0
只看该作者 3 发表于: 2008-10-13
谢谢分享!
离线nichelous

发帖
3278
贡献值
-19620
威望值
1679
技术分
34
织梦币
42
只看该作者 4 发表于: 2008-10-13
懂得感恩的站长,我支持你!
重出PHP江湖,谢谢各位朋友支持和关注……

卖车型数据、保养数据、机油数据、四滤数据、车型图片等
详进淘宝店:NIC网站无忧 http://shop35415489.taobao.com
企鹅2384419
离线windcontrail
发帖
17
贡献值
0
威望值
25
技术分
0
织梦币
0
只看该作者 5 发表于: 2008-10-13
引用第1楼lrichie于2008-10-13 14:05发表的  :
这个好,顶一下!!很不错!!
不过还是有点不完美的地方就是,会将自定义模型下面的所有图片删了。



自定义模型图片也在“uploads\allimg”这个目录下面的? 我好像没用到过,所以没有考虑进去,不好意思啊

大家用之前根据实际情况操作下,最好先在本机上面调试通过再到服务器上运行~~~~~~
离线白垩纪

发帖
31
贡献值
12
威望值
8
技术分
0
织梦币
0
只看该作者 6 发表于: 2008-10-13
感谢啊 !!!!!
离线abclhb

发帖
150
贡献值
-8
威望值
73
技术分
0
织梦币
0
只看该作者 7 发表于: 2008-10-13
用户被禁言,该主题自动屏蔽!
离线mayicc
发帖
23
贡献值
-4
威望值
7
技术分
0
织梦币
0
只看该作者 8 发表于: 2008-10-13
不错  谢谢
离线a5921
发帖
665
贡献值
2
威望值
342
技术分
0
织梦币
0
只看该作者 9 发表于: 2008-11-06
不错 确实可以 测试结果


删除文章  图片可以清除
编辑文章  无关联的可以清除


但是。。。我的图比较多

后台3秒显示 清除完成

但是。。。实际上还没有

等了20分钟 期间后台打不开

显示 Internal Server Error

但是查看FTP 无关联的图片已经清除  为了测试效果 我还上传了点别的文件 都木有了