织梦在发布文章的时候,难免需要一些图片等等让文章更丰富,但是在删除的时候也有了一定的复杂度。这次就分享一个很实用的功能,删除织梦文章的同时删掉该文章下的图片与附件等文件,有效的节省了后期慢慢排除无用图片和附件的时间还实时节省了一些不必要的存储空间。
实现方法如下:?
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?js_addonarticle.body?FROM?xmzy_addonarticle?WHERE?xmzy_addonarticle.aid?=?'$aid'";??
$row?=?$dsql->GetOne($query);??
if(is_array($row))??
return?$row;??
else??
return?false;??
}?//mobantianxia.cn修改于2010.01.28?
//写入日志文件??
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文件,找到:
$arcRow?=?$dsql->GetOne($arcQuery);
在下边添加:
$arcBodyRow?=?GetArcBody($aid);
?
最后找到:
return?TRUE;
在这句话上边添加:
//解析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);
}
到此就结束了,删除了文章会连带当前文章的图片和附件一气删除。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|