discuz 删除指定条件的资讯

<?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");
}

 

posted on 2014-03-05 09:52  bandbandme  阅读(281)  评论(0编辑  收藏  举报