火车头discuz6.1 完美采集的php接口文件 |
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.\n); //} //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(/\n\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("\t", , $subject); $lastpost = "$tid\t".checkAndTranslate($subject)."\t$timestamp\t$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]\t".checkAndTranslate($thread[subject])."\t$timestamp\t$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__); |