发布于2021-05-30 19:39 阅读(829) 评论(0) 点赞(0) 收藏(2)
当我们网站使用的久了,肯定会有很多文章,可能有一些废弃的或者过时的文章需要删除,当我们在织梦后台把这些文章删除后,我们只是把这篇文章的数据给删除了,这篇文章中所上传使用的图片文件,和缓存生成的静态html文件,还留在服务器里面,这样时间久了会造成我们的服务器浪费和存储空间不足的情况。那么我们该怎样删除文章时同时删除文章中的图片和缓存html静态文件呢?下面是具体的操作方法,我们一起来看看吧。(好像有些织梦版本删除文章时会自动删除多余的图片和缓存,可以先试一下自己的网站,如果不行可以尝试下面的方法)
首先,在"/include"目录下建立"extend.func.php"文件. 然后,将以下内容保存在"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]([^ title="liehuo.net" |/|>]*){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 [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'";
- $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);
- }
接下来打开"/dede/inc/inc_batchup.php"文件。
1:在33行下方加入,也就是"$arcRow = $dsql->GetOne($arcQuery);"下方:
$arcBodyRow = GetArcBody($aid);
2:在138行下方加入,也就是"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";
- }
- else $msg = " 位置:$file 结果:文件不存! 时间:$executetime";
- WriteToDelFiles($msg);
- }//END foreach
- }
- else
- {
- $msg = " 未在Body中解析到数据 Body原始数据:$arcBodyRow[body] 时间:$executetime";
- WriteToDelFiles($msg);
- }
至此,全部修改完成,删除文章时,程序会分析Body中的图片地址,然后删除.并在/data/目录下,产生日志记录文件:del_body_file.txt
在/dede/inc/inc_batchup.php 文件中找到
$htmlfile = GetTruePath().str_replace($GLOBALS['cfg_basehost'],'',$arcurl);
在它下面加入如下代码
- $mhtmlfile = GetTruePath().'/m'.str_replace($GLOBALS['cfg_basehost'],'',$arcurl);
- if(file_exists($mhtmlfile) && !is_dir($mhtmlfile))
- {
- @unlink($mhtmlfile);
- $arcurls = explode(".", $mhtmlfile);
- $sname = $arcurls[count($arcurls)-1];
- $fname = preg_replace("#(\.$sname)$#", "", $mhtmlfile);
- for($i=2; $i<=100; $i++)
- {
- $mhtmlfile = $fname."_{$i}.".$sname;
- if( @file_exists($mhtmlfile) ) @unlink($mhtmlfile);
- else break;
- }
- }
找到后台路径中的
dede/templets/``content_batch_up2.htm
找到下面代码:
- <input class="np" type="radio" checked="checked" name="action" value="modddpic" /><br />
- 更正缩图错误<br />
- <input class="np" type="radio" name="action" value="delerrdata" /><br />
- 清空错误的文档数据</td>
修改成:
- <input class="np" type="radio" checked="checked" name="action" value="modddpic" /><br />
- 更正缩图错误<br />
- <input class="np" type="radio" name="action" value="delerrdata" /><br />
- 清空错误的文档数据<br />
- <input class="np" type="radio" name="action" value="delerrpic" /><br />
- 清空错误的图片</td>
找到
dede/content_batchup_action2php
在最后一个大括号后增加
- elseif($action == 'delerrpic')
- {
- $file_a=array();
- function rFile($p){
- global $file_a;
- $handle=opendir($p);
- $dir_a=array();
- while ($file = readdir($handle)) {
- if($file!="." && $file!=".."){
- $tmp=$p."/".$file;
- if(is_dir($tmp)){
- $dir_a[count($dir_a)]=$tmp;
- }elseif(is_file($tmp)){
- $file_a[count($file_a)]=$tmp;
- }
- }
- }
- closedir($handle);
- foreach($dir_a as $v){
- rFile($v);
- }
- }
- rFile("../uploads/allimg");//调用,要遍历的目录
- foreach($file_a as $v){
- $temp=substr($v,2);
- $query = "select count(*) from dede_addonarticle where body like '%".$temp."%'";
- $dsql->setquery($query);
- $dsql->execute();
- while($row = $dsql->getarray())
- {
- if($row[0]==0){
- if(substr($v, -8, 4)!="_lit" && substr($v, -10, 5)!="index"){
- if(file_exists($v))
- unlink($v);
- }
- }
-
- }
- }
- $dsql->Close();
- ShowMsg("成功清除错误图片!","javascript:;");
- exit();
- }
作者:Nxnndn
链接:http://www.phpheidong.com/blog/article/86965/076f2ae853ffe38ead44/
来源:php黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 php黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-4
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!