欢迎来到六久阁织梦模板网!
织梦dedecms删除文章的同时删除该文章下的图片和附件以及缩略图

织梦dedecms删除文章的同时删除该文章下的图片和附件以及缩略图

浏览次数: 0

作者: 六久阁织梦模板网

信息来源: 六久阁

更新日期: 2020-08-02

文章简介

有时候我们删除文章的时候,文章的图片还是会留存在你的图片文件夹上面,这样很占服务器的内存,程序也会变得很大,所以我们需要删除文章的同时把文章里的图片、缩略图也对应的删掉。 但织梦本身是不支持的,需要经过二次开发才可以,互联网上有很多方法,本

  • 正文开始
  • 热门文章

有时候我们删除文章的时候,文章的图片还是会留存在你的图片文件夹上面,这样很占服务器的内存,程序也会变得很大,所以我们需要删除文章的同时把文章里的图片、缩略图也对应的删掉。

但织梦本身是不支持的,需要经过二次开发才可以,互联网上有很多方法,本人测过有些虽然能删除文章内的图片,但是并不能删除缩略图;有些虽然可以达到效果,但修改处太多,影响网站的一些功能失效。一、首先在修改前把需要修改的php文件备份好!

二、找到 织梦/include/extend.func.php

复制以下的全部代码直接覆盖到 extend.func.php 里最后

function GetPicsTruePath($body, $litpic) //解析body数据,获得所有图片的绝对地址
{
    $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;
}
function WriteToDelFiles($msg) //删除文章的时候会通过此函数记录日志
{
    if (empty($msg)) $savemsg = "未获得消息";
    else $savemsg = $msg;
    $errorFile = dirname(__FILE__) . '/../data/del_body_file.txt'; //删除记录文件
    $fp = @fopen($errorFile, 'a');
    @fwrite($fp, "\r\n{$savemsg}");
    @fclose($fp);
}
//获得文章Body数据
function GetArcBody($aid) {
    global $dsql;
    $query = "SELECT dede_addonarticle.body FROM dede_addonarticle WHERE dede_addonarticle.aid = '$aid'";
    $row = $dsql->GetOne($query);
    if (is_array($row)) return $row;
    else return false;
}


三、找到\dede\inc\inc_batchup.php

复制以下的全部代码直接覆盖 到 inc_batchup.php 文件,\dede\为默认的后台目录,如路径已修改,根据自己网站路径找对应的路径。

<?php
function DelArc($aid, $type = 'ON', $onlyfile = false) {
    global $dsql, $cfg_cookie_encode, $cfg_multi_site, $cfg_medias_dir;
    global $cuserLogin, $cfg_upload_switch, $cfg_delete, $cfg_basedir;
    global $admin_catalogs, $cfg_admin_channel;
    if ($cfg_delete == 'N') $type = 'OK';
    if (empty($aid)) return;
    $aid = ereg_replace("[^0-9]", '', $aid);
    $arctitle = $arcurl = '';
    //查询表信息
    $query = "Select ch.maintable,ch.addtable,ch.nid,ch.issystem From `dede_arctiny` arc
left join `dede_arctype` tp on tp.id=arc.typeid
left join `dede_channeltype` ch on ch.id=arc.channel where arc.id='$aid' ";
    $row = $dsql->GetOne($query);
    $nid = $row['nid'];
    $maintable = (trim($row['maintable']) == '' ? 'dede_archives' : trim($row['maintable']));
    $addtable = trim($row['addtable']);
    $issystem = $row['issystem'];
    //查询档案信息
    if ($issystem == - 1) {
        $arcQuery = "Select arc.*,tp.* from `$addtable` arc left join `dede_arctype` tp on arc.typeid=tp.id where arc.aid='$aid' ";
    } else {
        $arcQuery = "Select arc.*,tp.*,arc.id as aid from `$maintable` arc left join `dede_arctype` tp on arc.typeid=tp.id where arc.id='$aid' ";
    }
    $arcRow = $dsql->GetOne($arcQuery);
    $arcBodyRow = GetArcBody($aid);
    //检测权限
    if (!TestPurview('a_Del,sys_ArcBatch')) {
        if (TestPurview('a_AccDel')) {
            if (!in_array($arcRow['typeid'], $admin_catalogs) && (count($admin_catalogs) != 0 || $cfg_admin_channel != 'all')) {
                return false;
            }
        } else if (TestPurview('a_MyDel')) {
            if ($arcRow['mid'] != $cuserLogin->getUserID()) {
                return false;
            }
        } else {
            return false;
        }
    }
    //$issystem==-1 是单表模型,不使用回收站
    if ($issystem == - 1) $type = 'OK';
    if (!is_array($arcRow)) return false;
    /** 删除到回收站 **/
    if ($cfg_delete == 'Y' && $type == 'ON') {
        $dsql->ExecuteNoneQuery("Update `$maintable` set arcrank='-2' where id='$aid' ");
        $dsql->ExecuteNoneQuery("Update `dede_arctiny` set `arcrank` = '-2' where id = '$aid'; ");
    } else {
        //删除数据库记录
        if (!$onlyfile) {
            //删除缩略图
            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);
            }
            //删除相关附件
            if ($cfg_upload_switch == 'Y') {
                $dsql->Execute("me", "SELECT * FROM `dede_uploads` WHERE arcid = '$aid'");
                while ($row = $dsql->GetArray('me')) {
                    $addfile = $row['url'];
                    $aid = $row['aid'];
                    $dsql->ExecuteNoneQuery("Delete From `dede_uploads` where aid = '$aid' ");
                    $upfile = $cfg_basedir . $addfile;
                    if (@file_exists($upfile)) @unlink($upfile);
                }
            }
            $dsql->ExecuteNoneQuery("Delete From `dede_arctiny` where id='$aid'");
            if ($addtable != '') {
                $dsql->ExecuteNoneQuery("Delete From `$addtable` where aid='$aid' ");
            }
            if ($issystem != - 1) {
                $dsql->ExecuteNoneQuery("Delete From `dede_archives` where id='$aid' ");
            }
            $dsql->ExecuteNoneQuery("Delete From `dede_feedback` where aid='$aid' ");
            $dsql->ExecuteNoneQuery("Delete From `dede_member_stow` where aid='$aid' ");
            $dsql->ExecuteNoneQuery("Delete From `dede_taglist` where aid='$aid' ");
            $dsql->ExecuteNoneQuery("Delete From `dede_erradd` where aid='$aid' ");
        }
        //删除文本数据
        $filenameh = DEDEDATA . "/textdata/" . (ceil($aid / 5000)) . "/{$aid}-" . substr(md5($cfg_cookie_encode) , 0, 16) . ".txt";
        if (@is_file($filenameh)) @unlink($filenameh);
    }
    if (empty($arcRow['money'])) $arcRow['money'] = 0;
    if (empty($arcRow['ismake'])) $arcRow['ismake'] = 1;
    if (empty($arcRow['arcrank'])) $arcRow['arcrank'] = 0;
    if (empty($arcRow['filename'])) $arcRow['filename'] = '';
    //删除HTML
    if ($arcRow['ismake'] == - 1 || $arcRow['arcrank'] != 0 || $arcRow['typeid'] == 0 || $arcRow['money'] > 0) {
        return true;
    }
    //强制转换非多站点模式,以便统一方式获得实际HTML文件
    $GLOBALS['cfg_multi_site'] = 'N';
    $arcurl = GetFileUrl($arcRow['aid'], $arcRow['typeid'], $arcRow['senddate'], $arcRow['title'], $arcRow['ismake'], $arcRow['arcrank'], $arcRow['namerule'], $arcRow['typedir'], $arcRow['money'], $arcRow['filename']);
    if (!ereg("\?", $arcurl)) {
        $htmlfile = GetTruePath() . str_replace($GLOBALS['cfg_basehost'], '', $arcurl);
        if (file_exists($htmlfile) && !is_dir($htmlfile)) {
            @unlink($htmlfile);
            $arcurls = explode(".", $htmlfile);
            $sname = $arcurls[count($arcurls) - 1];
            $fname = ereg_replace("(\.$sname)$", "", $htmlfile);
            for ($i = 2; $i <= 100; $i++) {
                $htmlfile = $fname . "_{$i}." . $sname;
                if (@file_exists($htmlfile)) @unlink($htmlfile);
                else break;
            }
        }
    }
    //解析Body中的资源,并删除
    $willDelFiles = GetPicsTruePath($arcBodyRow['body'], $arcRow['litpic']);
    $nowtime = time();
    $executetime = MyDate('Y-m-d H:i:s', $nowtime); //获得执行时间
    $msg = "\r\n文章标题:$arcRow[title]";
    WriteToDelFiles($msg);
    if (!empty($willDelFiles)) {
        foreach ($willDelFiles as $file) {
            if (file_exists($file) && !is_dir($file)) {
                if (unlink($file)) $msg = "\r\n位置:$file\r\n结果:删除成功!\r\n时间:$executetime";
                else $msg = "\r\n位置:$file\r\n结果:删除失败!\r\n时间:$executetime";
            } else $msg = "\r\n位置:$file\r\n结果:文件不存!\r\n时间:$executetime";
            WriteToDelFiles($msg);
        } //END foreach
        
    } else {
        $msg = "\r\n未在Body中解析到数据\r\nBody原始数据:$arcBodyRow[body]\r\n时间:$executetime";
        WriteToDelFiles($msg);
    }
    return true;
}
//获取真实路径
function GetTruePath($siterefer = '', $sitepath = '') {
    $truepath = $GLOBALS['cfg_basedir'];
    return $truepath;
}
?>


织梦二次开发QQ群

本站客服QQ号:862782808(点击左边QQ号交流),群号(383578617) DedeCMS织梦教程QQ群 如果您有任何织梦问题,请把问题发到群里,阁主将为您写解决教程!

转载请注明: 织梦模板 » 织梦dedecms删除文章的同时删除该文章下的图片和附件以及缩略图

标签:
  • 织梦dedecms手机站m目录下不生成index.html实现动态更新
    阅读
    用 织梦建站 会手机站首页不更新的苦恼,每次 PC 更新,要去删除 m 目录下的 index.html ,手机站首页才会更新,这样很麻烦,通过以下修改,让手机站首页是动态的,不生成 index.html , PC 端更新后,手机端首页自动更新。 把 \m\index.php 里面的 $row[sho...
  • 织梦Fatal error: Call to undefined function make_hash() in /dede/sys_info.php on line 201的解决方法
    阅读
    织梦系统安装好后,进入后台,出现Fatal error: Call to undefined function make_hash() in /dede/sys_info.php on line 201 一般出现这个问题是因为升级网站引起的。我们可以直接把错误提示这段代码删除或者屏蔽就行了。 打开/dede/sys_info.php,找到201...
  • 织梦Dedecms 5.7 火车头采集免登陆发布接口适配PHP7.X插件
    阅读
    最近有粉丝说,之前用的火车头发布文章时,用免登陆接口在PHP7.0环境中显示空白,于是今天抽空更新了一下插件(话说,DedeCms早期版本无法在PHP7.X运行,用最新版的!),那么接下来的代码就是插件发布模块无须变更,只需要变更接口插件就可以了 ?php/*/////...
  • 织梦dedecms系统多城市分站功能开发思路
    阅读
    当前很多人用织梦dedecms系统建站,多城市分站对地方性长尾关键词和全国市场的推广有着很大的帮助,今天和大家分享下如何实现织梦dedecms系统多城市分站功能。 方法/步骤 织梦dede城市分站有三种方法: 第一种是建立N多个模板,有多少个城市建立多少个模板,...
  • 织梦dedecms提交自定义表单后发送到指定邮箱
    阅读
    网上很多教程都是用 dedecms 自带的邮件库发送邮件,而且是写死要发送的字段内容,今天我们用 phpmailer 来给站长发送自定义表单提交的数据到指定邮箱上 (QQ 邮箱, 163 邮箱都可以 ) ,不写死任何东西,有什么字段就提交发送什么字段。 操作之前,我们要先...
  • 织梦5.7火车头免登陆文章发布模块采集后自动更新织梦整站
    阅读
    织梦5.7火车头免登陆文章发布模块采集后自动更新织梦整站详细步骤: 1、下载文档后,把DedeCMS免登陆接口文章发布模块DedeCMS 5.7 免登陆接口文章发布模块.wpm复制到火车头采集规则文件夹Module下; 2、选择您网站对应的接口文件.如您网站是gbk编码,请选择 g...
  • dedecms织梦ckplayer视频播放器插件详细安装教程
    阅读
    织梦 ckplayer 视频播放器插件安装步骤: 第一步、下载安装插件。下载地址:点击此处 将下载下来的压缩包中的相应编码的模块文件解压出来再上传到织梦程序的 data/module/ 文件夹内或者直接在后台模块管理菜单里面选择上传新模块安装即可。如下图: 1.1 )上...
  • 织梦采集侠破解版自动采集触发教程24小时触发自动审核自动更新
    阅读
    最新采集侠V2.9.2破解版,可以在网站进行全自动数据采集,采集侠破解版可以帮助用户快速提升自己网站的Seo排名。 织梦采集侠是一款基于dedecms的一套根据关键词自动采集,无须编写复杂的采集规则,自动伪原创,自动发布内容的绿色插件。简单配置好后能实现24...
  • 织梦dedecms网站添加打赏功能
    阅读
    有时我们看到别人家的织梦dedecms网站有打赏功能,是不是羡慕嫉妒恨呢?今天我来给大家讲讲织梦网站怎么添加支付宝、微信打赏功能。 二、首先登陆畅言后台(没有畅言账号的首先注册账号) 三、进入后台,找到实验室--打赏 四、设置配置信息,保存。 五、复制...
  • 织梦火车头采集免登陆接口采集文章后自动更新栏目、首页、文章页,实现自动化采集
    阅读
    最近用织梦dedecms程序采集文章时候,发现每次采集都要去后台更新一下文章、栏目、上下篇以及首页,操作起来真心麻烦,后面在网上收集了一些代码以及经过自己调试,发现居然可以自动更新文章页以及栏目、首页。真心爽,这样子就能稳稳的挂机采集了哈。这是免...
收藏此文 打赏本站

如本文对您有帮助,就请六久阁织梦模板网抽根烟吧!

  • 支付宝打赏
    支付宝扫描打赏
    微信打赏
    微信扫描打赏
织梦后台生成静态页面出现504 Gateway time-out问题解决方法
« 上一篇 2020年08月02日
织梦在文章内容页统计文章字数方法
下一篇 » 2020年08月02日

精彩评论

有问题在这里提问,阁主会为你解决!
  • 全部评论(0
    还没有评论,快来抢沙发吧!
推荐织梦插件更多
更新时间:2020-02-25

人已经看过了!

更新时间:2019-06-09

人已经看过了!

更新时间:2017-09-11

人已经看过了!

更新时间:2018-12-05

人已经看过了!

更新时间:2018-11-08

人已经看过了!

更新时间:2018-05-23

人已经看过了!

推荐精品模板更多