在使用Dedecms时,许多人可能会遇到一个问题:当删除文章时,系统并不会自动删除与之关联的图片文件。这不仅会导致服务器存储空间的浪费,还可能影响网站的整体性能。本文将详细介绍如何通过修改Dedecms数据库和代码逻辑,实现删除文章时同步删除缩略图和大图的功能。 第一处修改:打开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);
}
}

//删除数据库的内容
    
第二处修改:找到以下SQL查询语句:

Select dede_archives.ID,dede_archives.title,dede_archives.typeid
    
将其更改为:

Select dede_archives.ID,dede_archives.title,dede_archives.typeid,dede_archives.litpic
    
第三处修改:在inc_batchup.php文件末尾添加一个函数,用于提取内容中的图片地址:

//获得内容中的图像地址
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];
}
}
    
通过以上三步操作,您可以确保在删除Dedecms中的文章时,相关联的缩略图和大图也会被一并删除。这种方法不仅可以帮助您优化服务器存储空间,还能提高网站管理效率。
注意:在进行任何代码修改之前,请务必备份您的文件和数据库,以防止意外数据丢失或系统故障。这样可以确保即使出现问题,您也可以迅速恢复到之前的稳定状态。