织梦dedecms后台删除文章的同时删除文章中的图片

发布时间:2019-04-25作者:冰貂主人点击:83

问题描述:
      在后台删除文章的时候,一般不会直接删除数据库信息及缩略图和文章中的图片,而是放入回收站中。如果在回收站中再删除的话就会删除数据库信息及缩略图,但是文章中的图片是删除不了的。那么我们服务器中的无用图片就会慢慢的多起来。
解决办法:
  1.打开/include/extend.func.php文件,在最后加入如下代码



//解析body数据,获得所有图片的绝对地址
function GetPicsTruePath($body,$litpic)
{
    $delfiles = array();  //存储图片地址数据
    if(!empty($litpic))
    {
            $litpicpath = GetTruePath();
            $litpicpath .= $litpic;
            $delfiles[] = $litpicpath;      //缩略图地址
    }
    preg_match_all("/src=[\"|'|\S|\s]([^ |\/|>]*){0,}(([^>]*)\.(gif|jpg|png))/isU",$body,$tmpdata);
    $picspath = array_unique($tmpdata[2]);//body中所有图片的地址
    foreach($picspath as $tmppath)
    {
        $path = GetTruePath();//获得绝对路径
        $picpath = preg_replace("/[a-zA-z]+:\/\/[^ |\/|\s]*/",'',$tmppath);//去掉网址部分
        $path .=$picpath;
        $delfiles[] = $path;//保存处理后的数据
      }
     return $delfiles;
}

//获得文章Body数据 
function GetArcBody($aid) 
{ 
    global $dsql; 
    $query = "SELECT body FROM dede_addonarticle WHERE aid = '$aid'"; 
    $row = $dsql->GetOne($query); 
    if(is_array($row)) 
    return $row; 
    else 
    return false; 
}

//写入日志文件 
function WriteToDelFiles($msg)//删除文章的时候会通过此函数记录日志 
{ 

    if(empty($msg)) $savemsg="未获得消息"; 
    else $savemsg = $msg; 
    $errorFile = dirname(__FILE__).'/../data/del_body_file.txt';//删除记录文件 
    $fp = @fopen($errorFile, 'a'); 
    @fwrite($fp," {$savemsg}"); 
    @fclose($fp); 
}

2.打开dede/inc/inc_batchup.php文件,找到54行:

查找$arcRow = $dsql->GetOne($arcQuery);

在下边添加:

$arcBodyRow = GetArcBody($aid);
最后找到   / /删除相关附件   if里面的while最后一个}下面,差不多121行下面添加:



//解析Body中的资源,并删除  
$willDelFiles = GetPicsTruePath($arcBodyRow['body'],$arcRow['litpic']);
$nowtime = time();
$executetime = MyDate('Y-m-d H:i:s',$nowtime);

//获得执行时间  
$msg = " 文章标题:$arcRow[title]";
WriteToDelFiles($msg);
if(!empty($willDelFiles))  
{
     foreach($willDelFiles as $file)  
     {
             if(file_exists($file) && !is_dir($file))  
             {
               if(unlink($file)) $msg = " 位置:$file 结果:删除成功! 时间:$executetime"; else $msg = " 位置:$file 结果:删除失败! 时间:$executetime";

             }
             //mobantianxia.cn修改于2010.01.28 else $msg = " 位置:$file 结果:文件不存! 时间:$executetime";
             WriteToDelFiles($msg);
     }
     //END foreach
} else  
{
        $msg = " 未在Body中解析到数据 Body原始数据:$arcBodyRow[body] 时间:$executetime";
        WriteToDelFiles($msg);
} 



经过本人检测:删除单篇文章时,缩略图和文章中的图片都能删除;删除多篇文章时,缩略图和文章中的图片也能删除。
会员前端发布的文章,管理员在后台删除后,缩略图和文章中的图片也可以删除。
这篇文章是针对后台管理员删除文章,并非前端的会员自己删除文章。
标签:dede删除文章