火车头discuz6.1 完美采集的php接口文件
author:一佰互联 2019-05-01   click:200
PS:对原文件的修改较大,程序中注释已经很详尽,这里就不多说了。
复制代码 代码如下:
<?php
// header("Content-Type:text/html;charset=UTF-8");
//if(function_exists("mb_convert_encoding")){
// $tmp = checkAndTranslate("使用前请将该文件直接上传至论坛根目录", 0);
// header("Content-Type:text/html;charset=UTF-8");
// print($tmp);
//}else{
// print("NO");
//}
// exit("this.line=".__line__);
/*
文件名:locoyonline_for_discuz610.php
*使用前请将该文件直接上传至论坛根目录
*本文件为GBK编码;
*处理后导入数据库的编码为:utf-8;
*需要替换字符时,需把replace.txt复制到同目录下;
*/
//处理全局变量
//foreach($_POST as $key => $value){
//$$key = $value ;
//print($key." = ".$value." ");
//}
//var_dump($_POST);
//exit("end-0");
// 需要插入的数据表
// 1.cdb_threads
// 2.cdb_rewardlog // ok 悬赏记录表
// 3.cdb_mythreads
// 4.cdb_posts
// 5.cdb_tags _update
// 6.cdb_threadtags
// 7.cdb_forums _update
// 8.cdb_members _update ok 更改悬赏表
//done end !
$user_list = file("./makeuser/username.txt");
// 随机发帖的用户名单,必须是已经注册的
// 关于批量注册用户名可以参考 Discuz 6.0+ 批量注册用户名
$user_list = array_map("curlAndCopy", $user_list);
function curlAndCopy($a){
return trim($a);
}
$replyusers = implode("|",$user_list);
//处理回复的格式
function trimAndCurl($str){
$str = preg_replace("/ s{5,}/","", $str , 1);
$str = trim($str);
$str = checkAndTranslate($str);
return $str;
}
function checkAndTranslate($mess, $if_replace =1, $in_char_type="GBK", $out_char_type="UTF-8"){
//if replace ?
if($if_replace){
$mess = curlAndReplace($mess);
}
//if chinese GBK ?
if(preg_match("/[x80-xff]./", $mess) ){
$mess = mb_convert_encoding($mess, $out_char_type, $in_char_type);
}
return addslashes($mess) ;
}
function curlAndReplace($message){
$replace_list = file("./makeuser/replace.txt");
foreach($replace_list as $item){
$item = preg_replace("/s+/","||",$item);
$items = explode("||",$item);
$tmp = "<!--replace-->";
$message = str_replace($items[0],$tmp,$message);
$message = str_replace($items[1],$items[0],$message);
$message = str_replace($tmp,$items[1],$message);
}
return $message;
}
define("CURSCRIPT", "post");
define("NOROBOT", TRUE);
require_once "./include/common.inc.php";
require_once DISCUZ_ROOT."./include/post.func.php";
$_DTYPE = $checkoption = $optionlist = array();
if($typeid) {
threadtype_checkoption();
}
require_once DISCUZ_ROOT."./include/discuzcode.func.php";
$navigation = $navtitle = $thread = "";
//这里是新添加的代码以,开始
if ( $lid <> "locoy" )
{
// die(验证密码错误);
}
//这里是添加的代码,结束,
//rq204,Q285576545,2008.7.29
$navigation = "» <a href="forumdisplay.php?fid=$fid".($extra ? "&".preg_replace("/^(&)*/", "", $extra) : "")."">$forum[name]</a> $navigation";
$navtitle = $navtitle.strip_tags($forum["name"])." - ";
if($forum["type"] == "sub") {
$query = $db->query("SELECT name, fid FROM {$tablepre}forums WHERE fid="$forum[fup]"");
$fup = $db->fetch_array($query);
$navigation = "» <a href="forumdisplay.php?fid=$fup[fid]">$fup[name]</a> $navigation";
$navtitle = $navtitle.strip_tags($fup["name"])." - ";
}
$special = empty($special) || !is_numeric($special) || $special < 0 || $special > 6 ? 0 : intval($special);
$allowpostattach = !empty($forum["allowpostattach"]) || (!$forum["postattachperm"] && $allowpostattach) || ($forum["postattachperm"] && forumperm($forum["postattachperm"]));
$attachextensions = $forum["attachextensions"] ? $forum["attachextensions"] : $attachextensions;
$enctype = $allowpostattach ? "enctype="multipart/form-data"" : "";
$maxattachsize_kb = $maxattachsize / 1000;
$postcredits = $forum["postcredits"] ? $forum["postcredits"] : $creditspolicy["post"];
$replycredits = $forum["replycredits"] ? $forum["replycredits"] : $creditspolicy["reply"];
$digestcredits = $forum["digestcredits"] ? $forum["digestcredits"] : $creditspolicy["digest"];
$postattachcredits = $forum["postattachcredits"] ? $forum["postattachcredits"] : $creditspolicy["postattach"];
$maxprice = isset($extcredits[$creditstrans]) ? $maxprice : 0;
$extra = rawurlencode($extra);
$blogcheck = empty($isblog) && empty($addtoblog) ? "" : "checked="checked"";
$notifycheck = empty($emailnotify) ? "" : "checked="checked"";
$stickcheck = empty($sticktopic) ? "" : "checked="checked"";
$digestcheck = empty($addtodigest) ? "" : "checked="checked"";
$subject = isset($subject) ? dhtmlspecialchars(censor(trim($subject))) : "";
$message = isset($message) ? censor(trim($message)) : "";
$readperm = isset($readperm) ? intval($readperm) : 0;
$price = isset($price) ? intval($price) : 0;
$urloffcheck = $usesigcheck = $smileyoffcheck = $codeoffcheck = $htmloncheck = $emailcheck = "";
$seccodecheck = ($seccodestatus & 4) && (!$seccodedata["minposts"] || $posts < $seccodedata["minposts"]);
$secqaacheck = $secqaa["status"][2] && (!$secqaa["minposts"] || $posts < $secqaa["minposts"]);
if($iscircle = $supe["status"] && $supe["circlestatus"] && $forum["status"] == 2) {
unset($forum["threadtypes"]);
}
$allowpostpoll = $allowpost && $allowpostpoll && ($forum["allowpostspecial"] & 1);
$allowposttrade = $allowpost && $allowposttrade && ($forum["allowpostspecial"] & 2);
$allowpostreward = $allowpost && $allowpostreward && ($forum["allowpostspecial"] & 4) && isset($extcredits[$creditstrans]);
$allowpostactivity = $allowpost && $allowpostactivity && ($forum["allowpostspecial"] & 8);
$allowpostdebate = $allowpost && $allowpostdebate && ($forum["allowpostspecial"] & 16);
$allowpostvideo = $allowpost && $allowpostvideo && ($forum["allowpostspecial"] & 32) && $videoopen;
$allowanonymous = $forum["allowanonymous"] || $allowanonymous ? 1 : 0;
$editorid = "posteditor";
$editoroptions = str_pad(decbin($editoroptions), 2, 0, STR_PAD_LEFT);
$editormode = $editormode == 2 ? $editoroptions{0} : $editormode;
$allowswitcheditor = $editoroptions{1};
$advanceeditor = $special ? 0 : 1;
$previewdisplay = !empty($previewpost) ? "" : "none";
if($action == "newthread") {
//复制newthread.inc.php
$discuz_action = 11;
if(empty($forum["fid"]) || $forum["type"] == "group") {
exit("未选择版块或版块不能发帖");
}
$isblog = empty($isblog) ? "" : "yes";
if($subject == "" || $message == "") {
exit("标题或内容为空");
}
if($post_invalid = checkpost()) {
exit("标题或内容超过发帖限制");
}
if($allowpostattach && is_array($_FILES["attach"])) {
foreach($_FILES["attach"]["name"] as $attachname) {
if($attachname != "") {
checklowerlimit($postattachcredits);
break;
}
}
}
$typeid = isset($typeid) && isset($forum["threadtypes"]["types"][$typeid]) ? $typeid : 0;
$iconid = !empty($iconid) && isset($_DCACHE["icons"][$iconid]) ? $iconid : 0;
$displayorder = $modnewthreads ? -2 : (($forum["ismoderator"] && !empty($sticktopic)) ? 1 : 0);
$digest = ($forum["ismoderator"] && !empty($addtodigest)) ? 1 : 0;
$blog = $allowuseblog && $forum["allowshare"] && !empty($addtoblog) ? 1 : 0;
$readperm = $allowsetreadperm ? $readperm : 0;
$isanonymous = $isanonymous && $allowanonymous ? 1 : 0;
$price = intval($price);
$price = $maxprice && !$special ? ($price <= $maxprice ? $price : $maxprice) : 0;
//echo $typeid.",".",".","
if(!$typeid && $forum["threadtypes"]["required"] && !$special) {
// exit("未填写主题分类");
}
$discuz_user=$_POST["username"];
$discuz_user = checkAndTranslate($discuz_user, 0);
$sql_tmp = "SELECT uid,password,secques FROM {$tablepre}members m WHERE m.username like "%$discuz_user%"";
$query =$db->query($sql_tmp);
if ($rs=$db->fetch_row($query)){
list($discuz_uid,$discuz_pw, $discuz_secques ) =$rs;
}
else
{
// exit("不存在的用户名".$discuz_user);
exit("不存在的用户名".$sql_tmp);
}
//var_dump($_POST);exit("<br />this.line=".__line__);
$messages = explode("|||",$message);
//是否需要去除对最佳答案的评论
//$messages = array_merge(array_slice($messages, 0, 2), array_slice($messages, 3));
$mc = count($messages);
$replycount = $mc -1;
$author = !$isanonymous ? $discuz_user : "";
$moderated = $digest || $displayorder > 0 ? 1 : 0;
$attachment = ($allowpostattach && $attachments = attach_upload()) ? 1 : 0;
$subscribed = !empty($emailnotify) && $discuz_uid ? 1 : 0;
$supe_pushstatus = $supe["status"] && $forum["supe_pushsetting"]["status"] == 1 && !$modnewthreads ? "1" : "0";
$sgidadd1 = $sgidadd2 = "";
if($iscircle) {
$sgidadd1 = ", sgid";
$sgidadd2 = ", "$sgid"";
}
/*预处理数据*/
//$price = mt_rand(3,10);
$price = 0;
$views = mt_rand(30,256);
$timestamp = mt_rand(strtotime("2008-12-25") ,strtotime("2008-12-29"));
$tagstatus = 0;
$tags = "";
//已解决:
//$price = -$price;
//$closed = 1;
//未解决:
$closed = 0;
$db->query("INSERT INTO {$tablepre}threads (fid, readperm, price, iconid, typeid, author, authorid, subject, dateline, lastpost, lastposter, displayorder, digest, blog,attachment, subscribed, moderated, supe_pushstatus $sgidadd1 ,special ,closed ,views)
VALUES ("$fid", "$readperm", "$price", "$iconid", "$typeid", "$author", "$discuz_uid", "".checkAndTranslate($subject)."", "$timestamp", "$timestamp", "$author", "$displayorder", "$digest", "$blog", "$attachment", "$subscribed", "$moderated", "$supe_pushstatus" $sgidadd2 ,0 ,$closed ,$views )");
$tid = $db->insert_id();
// making reward logs !
$db->query("INSERT INTO {$tablepre}rewardlog (tid,authorid,netamount,dateline) VALUES ("$tid", "$discuz_uid", "$price", "0")");
// updating members logs !
//if minus credits ?
//$db->query("UPDATE {$tablepre}members SET posts=posts+1,credits=credits+$price,lastpost="".$_SERVER["REQUEST_TIME"]."" WHERE uid ="$discuz_uid" ");
$db->query("UPDATE {$tablepre}members SET posts=posts+1,lastpost="".$_SERVER["REQUEST_TIME"]."" WHERE uid ="$discuz_uid" ");
if($subscribed) {
$db->query("REPLACE INTO {$tablepre}subscriptions (uid, tid, lastpost, lastnotify)
VALUES ("$discuz_uid", "$tid", "$timestamp", "$timestamp")", "UNBUFFERED");
}
$db->query("REPLACE INTO {$tablepre}mythreads (uid, tid, dateline, special) VALUES ("$discuz_uid", "$tid", "$timestamp", "0")", "UNBUFFERED");
if($moderated) {
updatemodlog($tid, ($displayorder > 0 ? "STK" : "DIG"));
updatemodworks(($displayorder > 0 ? "STK" : "DIG"), 1);
}
if($forum["threadtypes"]["special"][$typeid] && $optiondata && is_array($optiondata)) {
foreach($optiondata as $optionid => $value) {
$db->query("INSERT INTO {$tablepre}typeoptionvars (typeid, tid, optionid, value, expiration)
VALUES ("$typeid", "$tid", "$optionid", "$value", "".($typeexpiration ? $timestamp + $typeexpiration : 0)."")");
}
}
$bbcodeoff = checkbbcodes($message, !empty($bbcodeoff));
$smileyoff = checksmilies($message, !empty($smileyoff));
$parseurloff = !empty($parseurloff);
//$htmlon = bindec(($tagstatus && !empty($tagoff) ? 1 : 0).($allowhtml && !empty($htmlon) ? 1 : 0));
$htmlon = 1;
$pinvisible = $modnewthreads ? -2 : 0;
$db->query("INSERT INTO {$tablepre}posts (fid, tid, first, author, authorid, subject, dateline, message, useip, invisible, anonymous, usesig, htmlon, bbcodeoff, smileyoff, parseurloff, attachment)
VALUES ("$fid", "$tid", "1", "$discuz_user", "$discuz_uid", "$subject", "$timestamp", "".checkAndTranslate($messages[0])."", "$onlineip", "$pinvisible", "$isanonymous", "$usesig", "$htmlon", "$bbcodeoff", "$smileyoff", "$parseurloff", "$attachment")");
$pid = $db->insert_id();
if($tagstatus && $tags != "") {
$tags = str_replace(array(chr(0xa1).chr(0xa1), chr(0xa1).chr(0x40), chr(0xe3).chr(0x80).chr(0x80)), " ", $tags);
$tagarray = array_unique(explode(" ", censor($tags)));
$tagcount = 0;
foreach($tagarray as $tagname) {
$tagname = trim($tagname);
if(preg_match("/^([x7f-xff_-]|w){3,20}$/", $tagname)) {
$query = $db->query("SELECT closed FROM {$tablepre}tags WHERE tagname="".checkAndTranslate($tagname, 0).""");
if($db->num_rows($query)) {
if(!$tagstatus = $db->result($query, 0)) {
$db->query("UPDATE {$tablepre}tags SET total=total+1 WHERE tagname="".checkAndTranslate($tagname, 0).""", "UNBUFFERED");
}
} else {
$db->query("INSERT INTO {$tablepre}tags (tagname, closed, total)
VALUES ("".checkAndTranslate($tagname, 0)."", 0, 1)", "UNBUFFERED");
$tagstatus = 0;
}
if(!$tagstatus) {
$db->query("INSERT {$tablepre}threadtags (tagname, tid) VALUES ("".checkAndTranslate($tagname, 0)."", $tid)", "UNBUFFERED");
}
$tagcount++;
if($tagcount > 4) {
unset($tagarray);
break;
}
}
}
}
$tradeaid = 0;
if($attachment) {
$searcharray = $pregarray = $replacearray = array();
foreach($attachments as $key => $attach) {
$db->query("INSERT INTO {$tablepre}attachments (tid, pid, dateline, readperm, price, filename, description, filetype, filesize, attachment, downloads, isimage, uid, thumb, remote)
VALUES ("$tid", "$pid", "$timestamp", "$attach[perm]", "$attach[price]", "$attach[name]", "$attach[description]", "$attach[type]", "$attach[size]", "$attach[attachment]", "0", "$attach[isimage]", "$attach[uid]", "$attach[thumb]", "$attach[remote]")");
$searcharray[] = "[local]".$localid[$key]."[/local]";
$pregarray[] = "/[localimg=(d{1,3}),(d{1,3})]".$localid[$key]."[/localimg]/is";
$replacearray[] = "[attach]".$db->insert_id()."[/attach]";
}
$message = str_replace($searcharray, $replacearray, preg_replace($pregarray, $replacearray, $message));
$db->query("UPDATE {$tablepre}posts SET message="".checkAndTranslate($message, 0)."" WHERE pid="$pid"");
updatecredits($discuz_uid, $postattachcredits, count($attachments));
}
if($iscircle && $sgid) {
supe_dbconnect();
$query = $supe["db"]->query("UPDATE {$supe[tablepre]}groups SET lastpost="$timestamp" WHERE gid="$sgid"", "SILENT");
}
if($modnewthreads) {
$db->query("UPDATE {$tablepre}forums SET todayposts=todayposts+1 WHERE fid="$fid"", "UNBUFFERED");
} else {
if($digest) {
foreach($digestcredits as $id => $addcredits) {
$postcredits[$id] = (isset($postcredits[$id]) ? $postcredits[$id] : 0) + $addcredits;
}
}
updatepostcredits("+", $discuz_uid, $postcredits);
$subject = str_replace(" ", " ", $subject);
$lastpost = "$tid ".checkAndTranslate($subject)." $timestamp $author";
$db->query("UPDATE {$tablepre}forums SET lastpost="$lastpost", threads=threads+1, posts=posts+1, todayposts=todayposts+1 WHERE fid="$fid"", "UNBUFFERED");
if($forum["type"] == "sub") {
$db->query("UPDATE {$tablepre}forums SET lastpost="$lastpost" WHERE fid="$forum[fup]"", "UNBUFFERED");
}
}
echo("成功发表主题|".$tid);
}
if($replycount)
{
//开始发布回复
$discuz_action = 12;
require_once DISCUZ_ROOT."./include/forum.func.php";
print_r($replyuser);
$replyusers = explode("|",$replyusers);
$reusercount = count($replyusers);
for($re=1;$re<=$replycount;$re++)
{
$index = mt_rand(1,$reusercount-1);
while( in_array( $index ,$post_arr ) || $replyusers[$index] ==$_POST["username"] ){
$index = mt_rand(1,$reusercount-1);
}
$post_arr[] = $index;
$discuz_user = $replyusers[$index];
$discuz_user = checkAndTranslate($discuz_user, 0);
$query =$db->query("SELECT uid,password,secques FROM {$tablepre}members m WHERE m.username like "%$discuz_user%"");
if ($rs=$db->fetch_row($query)){
list($discuz_uid,$discuz_pw, $discuz_secques ) =$rs;
}
else
{
echo("不存在的用户名".$discuz_user);
continue;
}
$attachnum = 0;
if($allowpostattach && !empty($_FILES["attach"]) && is_array($_FILES["attach"])) {
foreach($_FILES["attach"]["name"] as $attachname) {
if($attachname != "") {
$attachnum ++;
}
}
$attachnum && checklowerlimit($postattachcredits, $attachnum);
} else {
$_FILES = array();
}
$attachments = $attachnum ? attach_upload() : array();
$attachment = empty($attachments) ? 0 : 1;
$subscribed = $thread["subscribed"] && $timestamp - $thread["lastpost"] < 7776000;
$newsubscribed = !empty($emailnotify) && $discuz_uid;
if($subscribed && !$modnewreplies) {
$db->query("UPDATE {$tablepre}subscriptions SET lastpost="$timestamp" WHERE tid="$tid" AND uid<>"$discuz_uid"", "UNBUFFERED");
}
if($newsubscribed) {
$db->query("REPLACE INTO {$tablepre}subscriptions (uid, tid, lastpost, lastnotify)
VALUES ("$discuz_uid", "$tid", "".($modnewreplies ? $thread["lastpost"] : $timestamp)."", "$timestamp")", "UNBUFFERED");
}
$bbcodeoff = checkbbcodes($message, !empty($bbcodeoff));
$smileyoff = checksmilies($message, !empty($smileyoff));
$parseurloff = !empty($parseurloff);
// $htmlon = $allowhtml && !empty($htmlon) ? 1 : 0;
$htmlon = 1;
$usesig = !empty($usesig) ? 1 : 0;
$isanonymous = $allowanonymous && !empty($isanonymous)? 1 : 0;
//$discuz_user = checkAndTranslate($discuz_user, 0);
$author = empty($isanonymous) ? $discuz_user : "";
$pinvisible = $modnewreplies ? -2 : 0;
$rand_time = mt_rand(150,3600);
$timestamp = $timestamp + $rand_time;
$db->query("INSERT INTO {$tablepre}posts (fid, tid, first, author, authorid, subject, dateline, message, useip, invisible, anonymous, usesig, htmlon, bbcodeoff, smileyoff, parseurloff, attachment)
VALUES ("$fid", "$tid", "0", "$discuz_user", "$discuz_uid", "", "$timestamp", "".trimAndCurl($messages[$re])."", "$onlineip", "$pinvisible", "$isanonymous", "$usesig", "$htmlon", "$bbcodeoff", "$smileyoff", "$parseurloff", "$attachment")");
$pid = $db->insert_id();
// updating reward logs
$db->query("UPDATE {$tablepre}rewardlog SET answererid="$discuz_uid",dateline="$timestamp" WHERE tid="$tid"");
// updating members logs !
if($re == 1){
//添加积分问题
$db->query("UPDATE {$tablepre}members SET posts=posts+1,credits=credits+$price,lastpost="".$_SERVER["REQUEST_TIME"]."" WHERE uid ="$discuz_uid" ");
}else{
$db->query("UPDATE {$tablepre}members SET posts=posts+1,lastpost="".$_SERVER["REQUEST_TIME"]."" WHERE uid ="$discuz_uid" ");
}
$db->query("REPLACE INTO {$tablepre}myposts (uid, tid, pid, position, dateline, special) VALUES ("$discuz_uid", "$tid", "$pid", "".($thread["replies"] + 1)."", "$timestamp", "0")", "UNBUFFERED");
$tradeaid = 0;
if($attachment) {
$searcharray = $pregarray = $replacearray = array();
foreach($attachments as $key => $attach) {
$db->query("INSERT INTO {$tablepre}attachments (tid, pid, dateline, readperm, price, filename, description, filetype, filesize, attachment, downloads, isimage, uid, thumb, remote)
VALUES ("$tid", "$pid", "$timestamp", "$attach[perm]", "$attach[price]", "$attach[name]", "$attach[description]", "$attach[type]", "$attach[size]", "$attach[attachment]", "0", "$attach[isimage]", "$attach[uid]", "$attach[thumb]", "$attach[remote]")");
$searcharray[] = "[local]".$localid[$key]."[/local]";
$pregarray[] = "/[localimg=(d{1,3}),(d{1,3})]".$localid[$key]."[/localimg]/is";
$insertid = $db->insert_id();
$replacearray[] = "[attach]".$insertid."[/attach]";
}
if(!empty($trade) && $thread["special"] == 2 && !empty($_FILES["tradeattach"]["tmp_name"][0])) {
$tradeaid = $insertid;
}
$message = str_replace($searcharray, $replacearray, preg_replace($pregarray, $replacearray, $message));
$db->query("UPDATE {$tablepre}posts SET message="".checkAndTranslate($message)."" WHERE pid="$pid"");
updatecredits($discuz_uid, $postattachcredits, count($attachments));
}
if($modnewreplies) {
$db->query("UPDATE {$tablepre}forums SET todayposts=todayposts+1 WHERE fid="$fid"", "UNBUFFERED");
if($newsubscribed) {
$db->query("UPDATE {$tablepre}threads SET subscribed="1" WHERE tid="$tid"", "UNBUFFERED");
}
} else {
$db->query("UPDATE {$tablepre}threads SET lastposter="$author", lastpost="$timestamp", replies=replies+1 ".($attachment ? ", attachment="1"" : "").", subscribed="".($subscribed || $newsubscribed ? 1 : 0)."" WHERE tid="$tid"", "UNBUFFERED");
updatepostcredits("+", $discuz_uid, $replycredits);
$lastpost = "$thread[tid] ".checkAndTranslate($thread["subject"])." $timestamp $author";
$db->query("UPDATE {$tablepre}forums SET lastpost="$lastpost", posts=posts+1, todayposts=todayposts+1 WHERE fid="$fid"", "UNBUFFERED");
if($forum["type"] == "sub") {
$db->query("UPDATE {$tablepre}forums SET lastpost="$lastpost" WHERE fid="$forum[fup]"", "UNBUFFERED");
}
}
echo "成功回复";
}
}
//exit("Run end.this.line=".__line__);