程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(1)

dedecms织梦删除文章时同时删除文章中的图片和缓存html静态文件

发布于2021-05-30 19:39     阅读(700)     评论(0)     点赞(0)     收藏(2)


当我们网站使用的久了,肯定会有很多文章,可能有一些废弃的或者过时的文章需要删除,当我们在织梦后台把这些文章删除后,我们只是把这篇文章的数据给删除了,这篇文章中所上传使用的图片文件,和缓存生成的静态html文件,还留在服务器里面,这样时间久了会造成我们的服务器浪费和存储空间不足的情况。那么我们该怎样删除文章时同时删除文章中的图片和缓存html静态文件呢?下面是具体的操作方法,我们一起来看看吧。(好像有些织梦版本删除文章时会自动删除多余的图片和缓存,可以先试一下自己的网站,如果不行可以尝试下面的方法)

dedecms织梦删除文章时同时删除文章中的图片和缓存html静态文件

一、织梦删除文章时同时删除文章中的图片

首先,在"/include"目录下建立"extend.func.php"文件. 然后,将以下内容保存在"extend.func.php"文件中,一共三个函数:

  1. //解析body数据,获得所有图片的绝对地址 
  2. function GetPicsTruePath($body,$litpic
  3. $delfiles = array();//存储图片地址数据 
  4. if(!empty($litpic)) 
  5. $litpicpath = GetTruePath(); 
  6. $litpicpath .= $litpic; 
  7. $delfiles[] = $litpicpath;//缩略图地址 
  8. preg_match_all("/src=["|'|S|s]([^ title="liehuo.net" |/|>]*){0,}(([^>]*).(gif|jpg|png))/isU",$body,$tmpdata); 
  9. $picspath = array_unique($tmpdata[2]);//body中所有图片的地址 
  10. foreach($picspath as $tmppath) 
  11. $path = GetTruePath();//获得绝对路径 
  12. $picpath = preg_replace("/[a-zA-z]+://[^ |/|s]*/",'',$tmppath);//去掉网址部分 
  13. $path .=$picpath; 
  14. $delfiles[] = $path;//保存处理后的数据 
  15. return $delfiles; 
  16. //获得文章Body数据 
  17. function GetArcBody($aid) 
  18. global $dsql; 
  19. $query = "SELECT [url=mailto:dede_addonarticle.body]dede_addonarticle.body[/url] FROM [url=mailto:%60dede_addonarticle]`dede_addonarticle[/url]` WHERE [url=mailto:dede_addonarticle.aid]dede_addonarticle.aid[/url] = '$aid'";
  20. $row = $dsql->GetOne($query); 
  21. if(is_array($row)) 
  22. return $row; 
  23. else 
  24. return false; 
  25. //写入日志文件 
  26. function WriteToDelFiles($msg)//删除文章的时候会通过此函数记录日志 
  27. if(empty($msg)) $savemsg="未获得消息"; 
  28. else $savemsg = $msg; 
  29. $errorFile = dirname(__FILE__).'/../data/del_body_file.txt';//删除记录文件 
  30. $fp = @fopen($errorFile, 'a'); 
  31. @fwrite($fp," {$savemsg}"); 
  32. @fclose($fp); 

接下来打开"/dede/inc/inc_batchup.php"文件。 
1:在33行下方加入,也就是"$arcRow = $dsql->GetOne($arcQuery);"下方: 
$arcBodyRow = GetArcBody($aid); 
2:在138行下方加入,也就是"return true;"上方: 

  1. //解析Body中的资源,并删除 
  2. $willDelFiles = GetPicsTruePath($arcBodyRow['body'],$arcRow['litpic']); 
  3. $nowtime = time(); 
  4. $executetime = MyDate('Y-m-d H:i:s',$nowtime);//获得执行时间 
  5. $msg = " 文章标题:$arcRow[title]"
  6. WriteToDelFiles($msg); 
  7. if(!empty($willDelFiles)) 
  8. foreach($willDelFiles as $file) 
  9. if(file_exists($file) && !is_dir($file)) 
  10. if(unlink($file)) $msg = " 位置:$file 结果:删除成功! 时间:$executetime"
  11. else $msg = " 位置:$file 结果:删除失败! 时间:$executetime"
  12. else $msg = " 位置:$file 结果:文件不存! 时间:$executetime"
  13. WriteToDelFiles($msg); 
  14. }//END foreach 
  15. else 
  16. $msg = " 未在Body中解析到数据 Body原始数据:$arcBodyRow[body] 时间:$executetime"
  17. WriteToDelFiles($msg); 

至此,全部修改完成,删除文章时,程序会分析Body中的图片地址,然后删除.并在/data/目录下,产生日志记录文件:del_body_file.txt

二、dedecms织梦删除文章时同时删除文章中缓存html静态文件

在/dede/inc/inc_batchup.php 文件中找到

$htmlfile = GetTruePath().str_replace($GLOBALS['cfg_basehost'],'',$arcurl);

在它下面加入如下代码

  1. $mhtmlfile = GetTruePath().'/m'.str_replace($GLOBALS['cfg_basehost'],'',$arcurl);
  2. if(file_exists($mhtmlfile) && !is_dir($mhtmlfile))
  3. {
  4. @unlink($mhtmlfile);
  5. $arcurls = explode(".", $mhtmlfile);
  6. $sname = $arcurls[count($arcurls)-1];
  7. $fname = preg_replace("#(\.$sname)$#", "", $mhtmlfile);
  8. for($i=2; $i<=100; $i++)
  9. {
  10. $mhtmlfile = $fname."_{$i}.".$sname;
  11. if( @file_exists($mhtmlfile) ) @unlink($mhtmlfile);
  12. else break;
  13. }
  14. }

三、dedecms织梦批量删除文章中未调用或废弃不用的图片

找到后台路径中的

dede/templets/``content_batch_up2.htm
  •  

找到下面代码:

  1. <input class="np" type="radio" checked="checked" name="action" value="modddpic" /><br />
  2. 更正缩图错误<br />
  3. <input class="np" type="radio" name="action" value="delerrdata" /><br />
  4. 清空错误的文档数据</td>
  •  

修改成:

  1. <input class="np" type="radio" checked="checked" name="action" value="modddpic" /><br />
  2. 更正缩图错误<br />
  3. <input class="np" type="radio" name="action" value="delerrdata" /><br />
  4. 清空错误的文档数据<br />
  5. <input class="np" type="radio" name="action" value="delerrpic" /><br />
  6. 清空错误的图片</td>

找到

dede/content_batchup_action2php

在最后一个大括号后增加

  1. elseif($action == 'delerrpic')
  2. {
  3. $file_a=array();
  4. function rFile($p){
  5. global $file_a;
  6. $handle=opendir($p);
  7. $dir_a=array();
  8. while ($file = readdir($handle)) {
  9. if($file!="." && $file!=".."){
  10. $tmp=$p."/".$file;
  11. if(is_dir($tmp)){
  12. $dir_a[count($dir_a)]=$tmp;
  13. }elseif(is_file($tmp)){
  14. $file_a[count($file_a)]=$tmp;
  15. }
  16. }
  17. }
  18. closedir($handle);
  19. foreach($dir_a as $v){
  20. rFile($v);
  21. }
  22. }
  23. rFile("../uploads/allimg");//调用,要遍历的目录
  24. foreach($file_a as $v){
  25. $temp=substr($v,2);
  26. $query = "select count(*) from dede_addonarticle where body like '%".$temp."%'";
  27. $dsql->setquery($query);
  28. $dsql->execute();
  29. while($row = $dsql->getarray())
  30. {
  31. if($row[0]==0){
  32. if(substr($v, -8, 4)!="_lit" && substr($v, -10, 5)!="index"){
  33. if(file_exists($v))
  34. unlink($v);
  35. }
  36. }
  37. }
  38. }
  39. $dsql->Close();
  40. ShowMsg("成功清除错误图片!","javascript:;");
  41. exit();
  42. }

 



所属网站分类: 技术文章 > 博客

作者:Nxnndn

链接:http://www.phpheidong.com/blog/article/86965/076f2ae853ffe38ead44/

来源:php黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

0 0
收藏该文
已收藏

评论内容:(最多支持255个字符)