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


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

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



# 才可以  # fclose  # fwrite  # file  # body  # del  # 原始数据  # 文件备份  # 可以达到  # 并不能  # 不支持  # 织梦dedecms删除文章的同时删除该文章下的图片和附件以及缩略图  # 执行时间  # 上有  # 也会  # 太多  # 互联网  # 图片和附件  # 织梦删除缩略图  # 织梦删除文章  # 织梦CMS教程 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化91478 】 【 技术知识72672 】 【 云计算0 】 【 GEO优化84317 】 【 优选文章0 】 【 营销推广36048 】 【 网络运营41350 】 【 案例网站102563 】 【 AI智能45237


相关推荐: 织梦发布文章时添加的tag标签无法保存解决方法_织梦CMS教程  织梦dedecms热门搜索关键字调用代码_织梦CMS教程  如何在景安云服务器上绑定域名并配置虚拟主机?  织梦dedecms的自定义表单带上当前页面的url地址_织梦CMS教程  阿里云提示织梦dedecms支付模块漏洞解决办法_织梦CMS教程  如何用狗爹虚拟主机快速搭建网站?  织梦让channelartlist标签支持currentstyle高亮属性方法_织梦CMS教程  dedecms织梦为每个页面生成二维码 _织梦CMS教程  如何挑选高效建站主机与优质域名?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  建站之星重新安装后模板如何恢复设置?  织梦dedecms会员中心我的收藏新增一个自定义字段显示_织梦CMS教程  织梦dedecms标签调用代码大全_织梦CMS教程  织梦整合kindeditor文本编辑器乱码问题解决办法_织梦CMS教程  安云自助建站系统如何快速提升SEO排名?  织梦cms整合*新版百度编辑器Ueditor1.3.6插件,亲测可用_织梦插件  织梦dedecms 5.7怎样在任意位置显示自由列表标题+链接_织梦CMS教程  织梦友情链接标签dede:flink使用limit标签方法_织梦CMS教程  dedecms织梦通过二级栏目id获取*栏目名称方法_织梦CMS教程  织梦dedecms搜索页不显示广告解决方法_织梦CMS教程  如何选择靠谱的建站公司加盟品牌?  织梦官方php服务器环境DedeAMPZ安装教程_织梦CMS教程  如何彻底删除建站之星生成的Banner?  织梦手机端文章内容图片变形解决方法_织梦CMS教程  建站主机数据库如何配置才能提升网站性能?  织梦文章页增加内容字体大小选择的功能_织梦CMS教程  织梦网站会员邮箱验证在阿里云ECS服务器上无法发送邮件_织梦CMS教程  织梦站内优化SEO之标题优化教程_SEO优化教程  如何通过虚拟主机快速完成网站搭建?  建站之星各版本价格是多少?  织梦网站SEO优化之标题过长被截断解决方法_SEO优化教程  如何破解联通资金短缺导致的基站建设难题?  织梦cms栏目列表首页与*页重复解决方法 _织梦CMS教程  dedecms织梦kindeditor编辑器整合七牛云支持支持图集_织梦插件  建站之星数据库如何正确配置?  如何选择建站程序?包含哪些必备功能与类型?  dedecms织梦实现中英文分页功能_织梦CMS教程  织梦关键词维护里面字数多的词优先字数少的词自动内链_织梦CMS教程  建站之星论坛模板定制与建站交流技巧解析  广州建站公司哪家好?十大优质服务商推荐  dedecms织梦点击数过千过万过亿写法_织梦CMS教程  浅谈织梦cms模板中标签中的一些SEO细节_SEO优化教程  织梦dedecms自定义表单添加地区联动显示数字解决方法_织梦CMS教程  如何用PHP快速搭建CMS系统?  如何用好域名打造高点击率的自主建站?  如何用美橙互联一键搭建多站合一网站?  如何在万网主机上快速搭建网站?  建站之星重装后如何自定义颜色与字体?  织梦DEDECMS搜索提交用a便签替换button标签方法_织梦CMS教程  织梦搜索功能禁止特定地区用户访问_织梦CMS教程 

 2020-08-02

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

南京市珐之弘网络技术有限公司


南京市珐之弘网络技术有限公司

南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 87067657

 13565296790

 87067657@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.