织梦删除空间中多余的没有被引用的图片

在用织梦建站的时候,我们时常会删除一些文章,但是有个问题,就是删除文章的同时,文章内的图片还保存在网站空间中,占用了服务器资源。我曾经就有过一次,无用的图片达到八百多MB,要是手动去删,何年何月啊。

一般来说有二种情况,我们分别来操作:

1、删除文章的同时,删除该文章内的图片,

打开dede/inc/inc_batchup.php

第一处找到

"//删除数据库的内容"

在这前面加上

//删除缩略图
if($$arcRow['litpic']!=""){
$$dsql->ExecuteNoneQuery("Delete From dede_uploads where url='$$arcRow[litpic]'");
$$truedir = GetTruePath($$arcRow['siterefer'],$$arcRow['sitepath']);
$$litpicfile = $$truedir.$$arcRow['litpic'];
@unlink($$litpicfile);
}
//删除大图
$$arcbodyQuery = "Select * from ".$$arcRow['addtable']." where aid='$$aid'";
$$arcbodyRow = $$dsql->GetOne($$arcbodyQuery);
$$imgsrcarray=GetImageSrc($$arcbodyRow['body']);
foreach ($$imgsrcarray as $$v) {
if((trim($$v)!="")&&(!eregi("^http://",$$v))){
$$dsql->ExecuteNoneQuery("Delete From dede_uploads where url='$$v'");
$$picfile = $$truedir.$$v;
@unlink($$picfile);
}
}
//删除数据库的内容

第二处:找到

Select dede_archives.ID,dede_archives.title,dede_archives.typeid

改为:

Select dede_archives.ID,dede_archives.title,dede_archives.typeid,dede_archives.litpic

第三处:
在文件最后加上一函数

//获得内容中的图像地址
function GetImageSrc($$body){
if( !isset($$body)) return '';
else{
preg_match_all ("/<(img|IMG)(.*)(src|SRC)=[\"|'|]{0,}([h|\/].*(jpg|JPG|gif|GIF))[\"|'|\s]{0,}/isU",$$body,$$out);
return $$out[4];
}
}

2、那就是很早之前删除了很多文章,当时并没有完成第一种情况时的修改, 意思就是明知道空间中有多余的图片。


找到后台路径中的

dede/templets/content_batch_up.htm

找到下面代码:

找到后台路径中的
dede/templets/content_batch_up.htm找到下面代码:
<inputclass="np"type="radio"checked="checked"name="action"value="modddpic"/><br /> 
更正缩图错误<br /> 
<inputclass="np"type="radio"name="action"value="delerrdata"/><br /> 
清空错误的文档数据</td>
修改成:
<inputclass="np"type="radio"checked="checked"name="action"value="modddpic"/><br /> 
更正缩图错误<br /> <inputclass="np"type="radio"name="action"value="delerrdata"/><br /> 
清空错误的文档数据<br /> <inputclass="np"type="radio"name="action"value="delerrpic"/><br /> 
清空错误的图片</td>


找到

dede/content_batchup_action.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();
}


+