discuz 删除指定条件的资讯

本文介绍了一段用于删除特定条件下资讯记录的PHP脚本。该脚本能够批量删除指定门户表中的文章及其附件,并更新相应的文章计数。同时,脚本会记录删除操作的日志,确保数据处理的可追溯性。
<?php

/*
 * 删除指定条件的资讯
 * 此脚本使用时需谨慎使用,使用前备份门户表
 * pre_portal_category pre_portal_article_title pre_portal_article_content pre_portal_article_count pre_portal_attachment
 * 
 */
define('IN_DISCUZ', true);
define('CHARSET', 'utf-8');
define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -6)) . '/';

require_once(DISCUZ_ROOT . 'config/config_global.php');
require_once(DISCUZ_ROOT . 'config/config_remake_imgsize.php');
require_once(DISCUZ_ROOT . 'source/class/class_upload.php');
require_once(DISCUZ_ROOT . 'source/class/class_image.php');
require_once(DISCUZ_ROOT . 'source/class/class_image_ext.php');
require_once(DISCUZ_ROOT . 'source/function/function_core.php');
require_once(DISCUZ_ROOT . '_TOOLS/function/function_getdata_common.php');
require_once(DISCUZ_ROOT . '_CLASS/_COMMON_CLASS/Mysql.class.php');

$dbconfig = $_config['db']['1'];
$_G['tablepre'] = $dbconfig['tablepre'];
$mysql = new mysql($dbconfig['dbhost'], $dbconfig['dbuser'], $dbconfig['dbpw'], $dbconfig['dbname'], $dbconfig['dbcharset'], $dbconfig['pconnect']);
$_G['setting'] = unserialize($mysql->resultOne("SELECT data FROM " . $_G['tablepre'] . "common_syscache WHERE cname='setting'"));
$logfilename = DISCUZ_ROOT . '/data/log/deleteArticles' . date('Ymd') . '.txt'; //日志文件
$showprogress = isset($argv[1]) && trim($argv[1]) == '1' ? true : 1; //是否显示过程信息

$where = ' WHERE uid=9832 and aid>1815'; // uid=10336 and aid>1815   just for yuanjun Editor


$totalnum = $mysql->resultOne("SELECT count(*) FROM pre_portal_article_title $where");
echo 'Total: ' . $totalnum;
//exit();
$pertask = 50; //每次从数据库中查询多少条数据,分批处理
$circletimes = ceil($totalnum / $pertask);
if ($totalnum < $pertask) {
    $pertask = $totalnum;
}
for ($i = 0; $i < $circletimes; $i++) {
    $aidsArr = $mysql->fetchAll("SELECT aid, catid FROM pre_portal_article_title $where LIMIT $pertask");
    $aids = array();
    $catids = array();
    foreach ($aidsArr as $arr) {
        $aids[] = $arr['aid'];
        $catids[$arr['catid']] = isset($catids[$arr['catid']]) ? $catids[$arr['catid']] + 1 : 1;
    }
    $idwhere = " WHERE aid in (" . implode(',', $aids) . ")";

    //update pre_portal_category
    $catana = '';
    foreach ($catids as $catid => $num) {
        $catana .= " catid: $catid => num:$num". "\n";
        $mysql->increase($_G['tablepre'] . 'portal_category', array('articles' => -$num), array('catid' => $catid));
    }

    //delete article from pre_portal_article_content;
    $mysql->query("DELETE FROM pre_portal_article_count $idwhere");

    //delete article from pre_portal_article_content;
    $mysql->query("DELETE FROM pre_portal_article_content $idwhere");

    //delete article from pre_portal_article_title
    $mysql->query("DELETE FROM pre_portal_article_title $idwhere");

    // delete article from pre_portal_attachment
    $attaches = $mysql->fetchAll("SELECT * FROM pre_portal_attachment $idwhere");
    if (!empty($attaches)) {
        foreach ($attaches as $attach) {
            $imgurl = $_G['setting']['attachdir'] . 'portal/' . $attach['attachment'];
            @unlink($imgurl);
        }
    }
    //增加日志
    $fp = @fopen($logfilename, 'a+');
    $fileadd = $catana. "Deleted articles aid is " . implode(',', $aids) . "(" . date("Y-m-d H:i:s", time()) . ")" . "\n";
    @fwrite($fp, $fileadd);
    @fclose($fp);

    $showprogress && showprogress("$i/$circletimes articles has deleted");
}

 

转载于:https://www.cnblogs.com/bandbandme/p/3581791.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值