网站运营时间长了总会留下一些过时的没用的内容,特别是采集的数据,其中难免有些不需要或者过时的内容,但在删除文章时Dedecms并不能帮我们删除其中的附带的图片,导致遗留的图片在系统中越来越多,变成了系统垃圾,对于空间不足的朋友更是麻烦,如果数据量较小时可以删除手动删除,但当数据量大时就有些力不从心了。

  下面是一个网友自己写的一个可以用于批量删除遗留图片的代码。

 

  一、找到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 dede_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();

 

  }

 

  就可以了,系统没有使用多线程处理的功能,当遗留图片较多时需要较长时间的等待,程序不删除缩略图和uploads/allimg目录下的index.html,如果uploads/allimg文件夹下有多余图片请修改程序后再用。希望对各位有所帮助。