递归删除dedecms多余附件

2012-12-21 12:48 来源:www.chinab4c.com 作者:dedecms专家

   递归删除dedecms多余附件,这个方式我们可以通过php递归调用读取,然后去dede_addsoft表里面匹配。如果该文件名不存在,我们就直接删除。因为在dedecms里面。删除某个文件的时候,他的附件是没删除的。这样就给dedecms的附件管理带来很大困难。

   set_time_limit(0);
header('Content-Type: text/html; charset=utf-8');
require_once (dirname(__FILE__) . "/include/common.inc.php");
echo "开始处理文件,请稍后。。。。。<br>";
scan_all("./uploads/fjjian");


function scan_all($dir) {
  
   global $dsql;

   $stack[] = $dir;
   while ($stack) {
       $thisdir = array_pop($stack);
       if ($dircont = scandir($thisdir)) {
           $i=0;
           while (isset($dircont[$i])) {
               if ($dircont[$i] !== '.' && $dircont[$i] !== '..' && $dircont[$i] !=='temp' && $dircont[$i] !=='.svn') {
                   $current_file = "{$thisdir}/{$dircont[$i]}";
                   if (is_file($current_file)) {
                     
                       $file = iconv("GB2312","UTF-8","$thisdir/$dircont[$i]");
                       if(!is_dir($file)){
                            $file = substr($file,1);
                      
                            $sql = "select aid from elecfans_addonsoft where softlinks like '%".$file."%'";
                           // echo $sql;echo "<br>";
                            $row = $dsql->GetOne($sql);
                            if(empty($row)){
                               
                                del_file('.'.$file);
                                $hand = fopen("del_log.txt","a+");
                                fwrite($hand,"delete:".$file."\r\n");
                                fclose($hand);

                            }else{
                                //文件名称md5
                                $dsql->ExecuteNoneQuery(" update elecfans_addonsoft set  file_md5 ='".md5($file)."' where aid='".$row['aid']."'");
                            }
                           
                       }
                                     

                   } elseif (is_dir($current_file)) {
                       if(!is_dir){
                            $file = iconv("GB2312","UTF-8","$thisdir/$dircont[$i]");
                            $file = substr($file,1);
                      
                            $sql = "select aid from elecfans_addonsoft where softlinks like '%".$file."%'";
                            $row = $dsql->GetOne($sql); echo $sql;echo "<br>";
                            if(empty($row)){
                                del_file('.'.$file);
                                $hand = fopen("del_log.txt","a+");
                                fwrite($hand,"delete:".$file."\r\n");
                                fclose($hand);

                            }else{
                                //文件名称md5
                                $dsql->ExecuteNoneQuery(" update elecfans_addonsoft set  file_md5 ='".md5($file)."' where aid='".$row['aid']."'");
                            }
                           
                           

                       }
                       $stack[] = $current_file;
                   }
               }
               $i++;
           }
       }
   }

}

function del_file($path =''){
   
    if(!empty($path)){
        $path = iconv("UTF-8","GB2312",$path);
        @unlink($path);

    }

}

以上就是本人总结的递归删除dedecms多余附件方式。

相关文章:xunsearch做dedecms搜索

 来源:http://www.chinab4c.com