在使用Dedecms管理网站内容时,您可能会遇到这样一个问题:当删除文章时,尽管文字内容被成功移除,但文章中的图片附件并不会自动删除。这将导致服务器空间的浪费,尤其是当图片文件较大时,这种浪费会更加明显。为了解决这一问题,我们可以通过修改PHP代码,实现删除文章的同时自动删除相关图片和附件。以下是具体的操作步骤。

// 打开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];
    }
}
    

完成以上步骤后,请确保在本地环境中先进行测试,确认无误后再上传至实际网站,以避免可能的错误影响正常运行。通过这些简单的代码调整,您可以有效减少服务器空间的浪费,提升网站资源管理效率。记得定期检查和优化您的网站文件,以保持最佳性能。