火车采集器发布出现"您当前的访问请求当中含有非法字符,已经被系统拒绝"

部分用户向我反映我的dx接口系列,在dx3.1发布的时候出现这样的错误提示,无法发布,通过接口发布却是正常的。

查了一下原因,发现这跟火车采集器在发布时使用urlencode模式有关。

解决方法如下:
1,使用火车采集器2008及之前版本,额,当我没说过
2,如果你使用的是我发布的接口,可以修改接口配置文件locoy.config.php,在配置文件末尾添加一行代码

define("DISABLEXSSCHECK", 1);

即只在火车采集器发布内容时,禁用安全检查,此方法只在接口模式下生效,正常用户访问论坛依然受安全检查

3,如果你没有使用我的接口,则可以修改dx的配置文件 config/config_global.php,禁用dx的安全检查

// 站点安全设置
$_config['security']['authkey']			= 'asdfasfas';	// 站点加密密钥
$_config['security']['urlxssdefend']		= true;		// 自身 URL XSS 防御
$_config['security']['attackevasive']		= 0;		// CC 攻击防御 1|2|4|8

即将$_config['security']['urlxssdefend']改成0;
但这样会禁用全局的安全检查,可能会引发一些不安全的恶意攻击,此方法不推荐。

Discuz帖子内容中的外部链接加上rel=nofollow [DZX3/X2]

帖子中可能会有很多用户加上外部链接,可以加上nofollow来降低导出权重。
只保留本站域名的链接。

即,链接中本站域名出现在最开始的位置,认定为合法的内部链接。

修改文件 source/function/function_discuzcode.php

function parseurl($url, $text, $scheme) {
        global $_G;
        if(!$url && preg_match("/((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|thunder|qqdl|synacast){1}:\/\/|www\.)[^\[\"']+/i", trim($text), $matches)) {
                $url = $matches[0];
                $length = 65;
                if(strlen($url) > $length) {
                        $text = substr($url, 0, intval($length * 0.5)).' ... '.substr($url, - intval($length * 0.3));
                }
                $nofllow = strpos($url, $_G['siteurl']) !== 0 ? '" rel="nofollow' : '';
                return '<a href="'.(substr(strtolower($url), 0, 4) == 'www.' ? 'http://'.$url : $url) . $nofllow .'" target="_blank">'.$text.'</a>';
        } else {
                $url = substr($url, 1);
                if(substr(strtolower($url), 0, 4) == 'www.') {
                        $url = 'http://'.$url;
                }
                $url = !$scheme ? $_G['siteurl'].$url : $url;
                $nofllow = strpos($url, $_G['siteurl']) !== 0 ? '" rel="nofollow' : '';
                return '<a href="'.$url . $nofllow .'" target="_blank">'.$text.'</a>';
        }
}

Discuz! X3 使用纯真IP库最新版,2013年7月数据,44万条

DX默认使用的IP库只有1M,运行时占用资源少,但很多ip不准确,更新也慢,默认存放的路径在data/ipdata/tinyipdata.dat

今天给转成纯真ip库,过程很简单

step 1,下载纯真ip库软件并安装,安装完成以后在安装目录找到qqwry.dat
http://update.cz88.net/soft/ip_setup.exe

step 2,如果论坛是gbk编码,可以直接进入 step 3,如果是其它编码,需要将gbk编码转换成论坛对应的编码
GB2UTF8_IPLook_tool
下载附件以后,使用IpLook,将qqwry.dat转换成qqwry.txt,然后用gb2utf工具将qqwry.txt转换成utf-8编码。选择gb-utf8,并设置为no bom模式。最后再用iplook将qqwry.txt转换回qqwry.dat,这样就完成了文件的转换

由于utf-8编码存储字节要比gbk长,转换以后的qqwry.dat会比gbk版本大一些,10M左右。

step 3,将qqwry.dat上传到论坛/data/ipdata/wry.dat ,并将tinyipdata.dat删除或者改名

我压缩好了一个UTF8的版本
wry.dat

Discuz!X2.5两处Bug修复

1,Discuz!X2.5用户删除短消息提示“抱歉,您的操作有误”的解决办法

/source/include/spacecp/spacecp_pm.php 127行修改如下内容:

$return = C::t('common_member_grouppm')->update($_G['uid'], $gpmid, array('status' => -1));

修改为

foreach($gpmid as $_gpmid)
    $return = C::t('common_member_grouppm')->update($_G['uid'], $_gpmid, array('status' => -1));

错误原因:$gpmid为提交的数组,在common_member_grouppm中,只能接受数字并进行了强制转换

2,解决升级Discuz! X2.5 0901 版本后点击 站点统计 下的 管理团队 和 管理统计 时出现文件错误

source/class/table/table_common_member.php 第111行左右!

$users += C::t($this->_table.'_archive')->fetch_all_by_adminid($adminids);

修改为

$users += C::t($this->_table.'_archive')->fetch_all_by_adminid($adminids, 0);

Discuz!X2.5论坛接口、文章接口升级公告

自上个月发布Discuz!X2.5论坛接口以来,已经有百多位用户升级到了X2.5版本的接口,经过一段时间的使用,收集到两个接口的bug,今天进行了升级。

请收费用户前往授权中心更新接口:http://my.4wei.cn/。
部分免费用户不知道如何购买接口,不知道如何下载免费版,请点击这里:http://www.4wei.cn/archives/1001689

以下为几个常见的问题解决方法

1,总是提示标题为空,内容为空,即使是直接访问locoy.php也提示标题为空。

原因是DX2.5的变量兼容模式没有打开,这个问题常见于从2.0升级到2.5的用户,全新安装的用户不会遇到。
解决办法是在论坛配置文件 config/config_global.php 的最末尾加上一段代码,注意,是DX论坛的配置文件。

$_config['input']['compatible'] = 1;

2,发布内容时,有时需要发布一些含有审核关键词的文章,也需要发一些带链接的帖子,接口会提示“抱歉,您没有权限发表 URL 连接”
解决办法是在接口配置文件默认加上一段代码,注意,是接口配置文件,一般为locoy.config.php,locoy.arc.config.php。

//允许发布链接
$_G['group']['allowposturl'] = 1;
//忽略审核内容
$_G['group']['ignorecensor'] = 1;

Discuz!X2 用户改名程序

Discuz!X2 修改用户名小工具,可以安全的修改论坛和UCENTER中的关联信息。

在网上找了一些插件,发现没有对UCENTER数据库做检查,也没有对新的用户名做检查,容易产生错误。

<?php
require './source/class/class_core.php';
require './source/function/function_forum.php';

$discuz = & discuz_core::instance();
$discuz->init();

//加载UCENTER支持
loaducenter();

$olduserid = '';
$oldusername = '76135';
$newusername = '果子狸';

DB::query("SET NAMES utf8;");
if(empty($olduserid) || !is_numeric($olduserid))
{
	$user = DB::fetch_first("SELECT uid FROM ".UC_DBTABLEPRE."members WHERE username = '{$oldusername}'");
	$olduserid = $user['uid'];
	empty($olduserid) && exit('没有找到旧用户');
}

if(empty($newusername) || !is_numeric($olduserid))
{
	echo '请指定用户的UID或者用户名';
	exit;
}

$check = uc_user_checkname($newusername);
$error_info = array(
	'-1' => '新用户名不合法',
	'-2' => '新用户名包含要不允许注册的词语',
	'-3' => '新用户名已经存在',
);
$check !== 1 && exit($error_info[$check]);

//修改UCENTER中的记录
DB::query("UPDATE ".UC_DBTABLEPRE."members SET `username`='{$newusername}' WHERE `uid`='{$olduserid}'");

//修改论坛数据表中的所有记录
$tables = array(
	'common_block' => array('id' => 'uid', 'name' => 'username'),
	'common_invite' => array('id' => 'fuid', 'name' => 'fusername'),
	'common_member' => array('id' => 'uid', 'name' => 'username'),
	'common_member_security' => array('id' => 'uid', 'name' => 'username'),
	'common_mytask' => array('id' => 'uid', 'name' => 'username'),
	'common_report' => array('id' => 'uid', 'name' => 'username'),

	'forum_thread' => array('id' => 'authorid', 'name' => 'author'),
	'forum_post' => array('id' => 'authorid', 'name' => 'author'),
	'forum_activityapply' => array('id' => 'uid', 'name' => 'username'),
	'forum_groupuser' => array('id' => 'uid', 'name' => 'username'),
	'forum_pollvoter' => array('id' => 'uid', 'name' => 'username'),
	'forum_postcomment' => array('id' => 'authorid', 'name' => 'author'),
	'forum_ratelog' => array('id' => 'uid', 'name' => 'username'),

	'home_album' => array('id' => 'uid', 'name' => 'username'),
	'home_blog' => array('id' => 'uid', 'name' => 'username'),
	'home_clickuser' => array('id' => 'uid', 'name' => 'username'),
	'home_docomment' => array('id' => 'uid', 'name' => 'username'),
	'home_doing' => array('id' => 'uid', 'name' => 'username'),
	'home_feed' => array('id' => 'uid', 'name' => 'username'),
	'home_feed_app' => array('id' => 'uid', 'name' => 'username'),
	'home_friend' => array('id' => 'fuid', 'name' => 'fusername'),
	'home_friend_request' => array('id' => 'fuid', 'name' => 'fusername'),
	'home_notification' => array('id' => 'authorid', 'name' => 'author'),
	'home_pic' => array('id' => 'uid', 'name' => 'username'),
	'home_poke' => array('id' => 'fromuid', 'name' => 'fromusername'),
	'home_share' => array('id' => 'uid', 'name' => 'username'),
	'home_show' => array('id' => 'uid', 'name' => 'username'),
	'home_specialuser' => array('id' => 'uid', 'name' => 'username'),
	'home_visitor' => array('id' => 'vuid', 'name' => 'vusername'),

	'portal_article_title' => array('id' => 'uid', 'name' => 'username'),
	'portal_comment' => array('id' => 'uid', 'name' => 'username'),
	'portal_topic' => array('id' => 'uid', 'name' => 'username'),
	'portal_topic_pic' => array('id' => 'uid', 'name' => 'username'),
);

foreach($tables as $table => $conf) {
	DB::query("UPDATE ".DB::table($table)." SET `$conf[name]`='{$newusername}' WHERE `$conf[id]`='{$olduserid}'");
}

echo '处理完成';
exit;
?>

DX全能接口实现随机回复的发布

尘缘的接口采用主程序加密,配置文件加密的方式,有编程经验的同学可以直接修改配置文件来实现自定义发布效果的功能。

如一些同学需要使用随机用户名发帖的功能,简单来说,只需要在config.php加上一段代码即可实现。

$randReplay = array('|||随机回复1|||牛逼|||', '|||随机回复2|||不错');
$_G['gp_message'] = $_G['gp_message'] . $randReplay[array_rand($randReplay)];

作用是随机生成一组(多条回复内容)随机回复的内容。

完整的配置文件如下:

<?php
/**
 * Discuz!X_Ultimate	By 尘缘
 * 如果修改本配置文件出现程序错误,请将本配置文件还原
 *
 * 作者:尘缘
 * Q Q:130775
 * 邮箱:admin@4wei.cn
 * 博客:http://www.4wei.cn
 * 更新:2011-07-05
 * 
 * 接口升级:http://my.4wei.cn/index.php
 * 
 * 基本安装:http://www.4wei.cn/files/X2/1.wmv
 * 高级配置:http://www.4wei.cn/files/X2/2.wmv
 * 分类信息:http://www.4wei.cn/files/X2/3.wmv
 **/

if(!defined('IN_DISCUZ')) {
	exit('Access Denied');
}

//安全设置,允许访问本接口的用户ID,多个UID用逗号分开,开启本功能后则需要先登陆再发布数据,不启用则留空
$allowUID = 0;

//发布主题贴使用的用户名,多个用户名用|||分开,建议放50-100个用户名
$postusers		=	"发贴1号|||发贴2号|||发贴3号|||发贴4号|||发贴5号|||发贴6号|||发贴7号|||发贴8号|||发贴9号|||发贴10号|||发贴11号|||发贴12号|||发贴13号|||发贴14号|||发贴15号|||发贴16号|||发贴17号|||发贴18号|||发贴19号|||发贴20号|||发贴21号|||发贴22号|||发贴23号|||发贴24号|||发贴25号|||发贴26号|||发贴27号|||发贴28号|||发贴29号|||发贴30号";

//发布回复贴使用的用户名,多个用户名用|||分开,建议放50-100个用户名
$replyusers		=	"回贴1号|||回贴2号|||回贴3号|||回贴4号|||回贴5号|||回贴6号|||回贴7号|||回贴8号|||回贴9号|||回贴10号|||回贴11号|||回贴12号|||回贴13号|||回贴14号|||回贴15号|||回贴16号|||回贴17号|||回贴18号|||回贴19号|||回贴20号|||回贴21号|||回贴22号|||回贴23号|||回贴24号|||回贴25号|||回贴26号|||回贴27号|||回贴28号|||回贴29号|||回贴30号";

//用户注册失败时,使用的随机用户UID,只在注册用户失败时生效
$randUserID = '1,2,3,4,5';						//随机从论坛抽取用户发帖的取值范围,多个用户ID用,分开

//以下的用户注册信息,留空则全部自动生成
$password = "123456";							//注册用户使用的默认密码
$email = "";									//注册用户使用的默认邮箱,请一定要修改成自己的邮箱
$questionid = "尘缘的QQ号码";					//注册用户名的问题
$answer = "130775";								//注册用户名的答案

//帖子参数
$time = 2345 * rand(1,7);                       //发布回复默认间隔时间
$oneuser = 0;									//是否启用一人发贴模式,适用于回帖也是一楼作者发贴的帖子,1为启用,0为不启用
$chktitle = 0;									//是否检测重复标题,重复的帖子将跳过

//高级效果
$addfeed = 1;									//发贴是否添加动态 ,1为启用,0为不启用
$retitle = '';     								//回复标题,留空则不启用,如"RE:{subject}"
$htmlon = 0;									//是否启用HTML发贴,1为启用,0为不启用
$randview = rand(1, 33);        				//每增加一条回复增加的随机浏览数量
$showGroup = 1;                 				//论坛接口中是否列出所有群组,1为启用,0为不启用
$price = 0;										//主题金币

//附件效果
//使用火车采集器发布前,请先将附件上传到论坛附件目录,否则将无法正确获取附件信息
$down_attachment = 1 ;                          //是否启用附件识别,1为启用,0为不启用
$remote = 0;									//是否启用远程附件,1为启用,0为不启用
$attprice = 0;									//附件金币
$hide_attachment = 0 ;                          //是否启用非图片附件自动隐藏
$setthreadcover = 1;							//自动提取图片附件作为图片列表封面

//以下是一些替换字符,支持正则,如果修改后程序出错,请还原,支持关键字替换和链接。
$str_for_replace = array(
	"<blockquote>([\s\S]*?)</blockquote>"		=>	'[quote]\\1[/quote]',
	"\([\d\.\s]*?[kmb]+\)"						=>	'',
	"下载次数[\d: : ]+"							=>	'',
	"<div id=\"code\d+?\">([\s\S]*?)</div>"		=>	'',
	"<embed[^>]+src=\"([^\"]+\.swf)\"[^>]*?>"	=>	'[flash]\\1[/flash]',
	"<embed[^>]+src=\"([^\"]+\.mp3)\"[^>]*?>"	=>	'',
	"\n[\s\n]+"									=>	"\n",
	"(\r\n){2,}"								=>	"\r\n",
	"<center>([\s\S]*?)</center>"				=>	"[align=center]\\1[/align]\r\n",
);

//以下是支持的文件格式列表,可以自由添加需要提取的附件链接后缀(扩展名)
$attachment_type = "7z|rar|bittorrent|torrent|pdf|jpg|gif|png|bmp|swf|fla|flv|swi|wav|mid|mp3|m3u|wma|asf|asx|vqf|mpg|mpeg|avi|wmv|rar|rmvb|rm|rv|txt|rtf|wri|chm|docx|ppt|doc|xls|zip|arj|arc|cab|lzh|lha|tar|gz|exe|bat|dll|sisx|sis";

$randReplay = array('|||随机回复1|||牛逼|||', '|||随机回复2|||不错');
$_G['gp_message'] = $_G['gp_message'] . $randReplay[array_rand($randReplay)];
?>

[免费]土豆网视频专辑采集接口详解

接上篇:
[免费下载]土豆网专辑采集规则+接口
http://www.4wei.cn/archives/1001491

以下是接口全文。
我给一些重要步骤做了注释。

tudou.php下载

<?php
/*
设置接口为60秒连接,防止采集远程链接超时
*/
set_time_limit(60);

/*
获取火车采集器传过来的ID,组装出土豆的专辑链接
*/
$lid = intval($_GET["lid"]);
if(empty($lid)) exit();

$uri = sprintf("http://www.tudou.com/playlist/p/l%d.html", $lid);

/*
使用CUrl函数进行远程链接的内容获取,就是采集过程
*/
$html= curl($uri);

/*
如果没有采集到内容,则重试3次
*/
if(empty($html)) $html= curl($uri);
if(empty($html)) $html= curl($uri);
if(empty($html)) $html= curl($uri);

/*
如果采集的网页进行了Gzip压缩,则调用gzdecode函数进行解压,以获取明文
*/
$html= strpos($html, "<")==0 ? $html : gzdecode($html);

/*
使用正则获取连续的视频ID及标题
*/
preg_match_all('@iid:(\d+)\s+?,title:"([^"]+)"@is', $html, $match);

/*
遍历所有视频,组装出Discuz的Flash视频播放代码。
*/
foreach ($match[1] as $key=>$iid)
{
$code = sprintf("[flash]http://www.tudou.com/player/outside/player_outside_list.swf?iid=%d&default_skin=http://js.tudouui.com/bin/player2/outside/Skin_outside_list_7.swf&autoPlay=false&listType=1&rurl=&autostart=false&lid=%d[/flash]", $iid, $lid);

/*
最后组装出方便火车采集器循环采集的代码格式
*/
printf("<!--titlestart-->%s<!--titleend--><!--codestart-->$code<!--codeend-->", $match[2][$key]);
}

function curl($url) {
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_TIMEOUT, 2 );
curl_setopt ( $ch, CURLOPT_ENCODING, "gzip" );

$data = curl_exec ( $ch );

if (curl_errno ( $ch )) {
/*debug info*/
return curl_error ( $ch );
} else {
curl_close ( $ch );
}

return $data;
}

function gzdecode($data) {
$len = strlen($data);
if ($len < 18 || strcmp(substr($data,0,2),"\x1f\x8b")) {
return null; // Not GZIP format (See RFC 1952)
}
$method = ord(substr($data,2,1)); // Compression method
$flags = ord(substr($data,3,1)); // Flags
if ($flags & 31 != $flags) {
// Reserved bits are set -- NOT ALLOWED by RFC 1952
return null;
}
// NOTE: $mtime may be negative (PHP integer limitations)
$mtime = unpack("V", substr($data,4,4));
$mtime = $mtime[1];
$xfl   = substr($data,8,1);
$os    = substr($data,8,1);
$headerlen = 10;
$extralen = 0;
$extra     = "";
if ($flags & 4) {
// 2-byte length prefixed EXTRA data in header
if ($len - $headerlen - 2 < 8) {
return false;    // Invalid format
}
$extralen = unpack("v",substr($data,8,2));
$extralen = $extralen[1];
if ($len - $headerlen - 2 - $extralen < 8) {
return false;    // Invalid format
}
$extra = substr($data,10,$extralen);
$headerlen += 2 + $extralen;
}
$filenamelen = 0;
$filename = "";
if ($flags & 8) {
// C-style string file NAME data in header
if ($len - $headerlen - 1 < 8) {
return false;    // Invalid format
}
$filenamelen = strpos(substr($data,8+$extralen),chr(0));
if ($filenamelen === false || $len - $headerlen - $filenamelen - 1 < 8) {
return false;    // Invalid format
}
$filename = substr($data,$headerlen,$filenamelen);
$headerlen += $filenamelen + 1;
}
$commentlen = 0;
$comment = "";
if ($flags & 16) {
// C-style string COMMENT data in header
if ($len - $headerlen - 1 < 8) {
return false;    // Invalid format
}
$commentlen = strpos(substr($data,8+$extralen+$filenamelen),chr(0));
if ($commentlen === false || $len - $headerlen - $commentlen - 1 < 8) {
return false;    // Invalid header format
}
$comment = substr($data,$headerlen,$commentlen);
$headerlen += $commentlen + 1;
}
$headercrc = "";
if ($flags & 1) {
// 2-bytes (lowest order) of CRC32 on header present
if ($len - $headerlen - 2 < 8) {
return false;    // Invalid format
}
$calccrc = crc32(substr($data,0,$headerlen)) & 0xffff;
$headercrc = unpack("v", substr($data,$headerlen,2));
$headercrc = $headercrc[1];
if ($headercrc != $calccrc) {
return false;    // Bad header CRC
}
$headerlen += 2;
}
// GZIP FOOTER - These be negative due to PHP's limitations
$datacrc = unpack("V",substr($data,-8,4));
$datacrc = $datacrc[1];
$isize = unpack("V",substr($data,-4));
$isize = $isize[1];
// Perform the decompression:
$bodylen = $len-$headerlen-8;
if ($bodylen < 1) {
// This should never happen - IMPLEMENTATION BUG!
return null;
}
$body = substr($data,$headerlen,$bodylen);
$data = "";
if ($bodylen > 0) {
switch ($method) {
case 8:
// Currently the only supported compression method:
$data = gzinflate($body);
break;
default:
// Unknown compression method
return false;
}
} else {
// I'm not sure if zero-byte body content is allowed.
// Allow it for now... Do nothing...
}
// Verifiy decompressed size and CRC32:
// NOTE: This may fail with large data sizes depending on how
//       PHP's integer limitations affect strlen() since $isize
//       may be negative for large sizes.
if ($isize != strlen($data) || crc32($data) != $datacrc) {
// Bad format! Length or CRC doesn't match!
return false;
}
return $data;
}

?>

Discuz!X全能发布接口2011版视频教程发布,近乎完美,秒杀一切!

X2轰轰烈烈的发布了,尘缘花了近半个月的时间,对X系列接口进行了优化、重构,同时也针对最新的接口,发布了新的使用教程,欢迎大家下载使用。 

同时,尘缘也将免费版同步做了发布效果优化,大家可以下载试用。
截至2011-05-29,尘缘开发的Discuz!系列接口已经完全适用于Discuz!7.1/7.2,Discuz!X1/X1.5/X1,欢迎新老用户购买升级!

Discuz!x2接口的一点更新和未来功能开发设计

今天有同学反映一些像引号和< >类的代码,无法正确转换为UBB,发布出来以后出现乱码。经过一顿测试,发现DX对未正常闭合的HTML不能完美的实现UBB转换。

一顿倒腾以后,先解决了这个bug。

然后给非图片附件加上自动隐藏的功能,方便某些同志有特殊的要求,当然还想着做一个不在帖内显示附件的功能,后来想想会破坏帖子结构,就未加上这个功能。

然后呢,优化了一下正则过滤的函数,对多媒体的支持非常完美,像YouKu这类的播放代码可以直接支持,其它的播放代码也是非常容易获取不错的效果。

从我现在的测试来看,数据采集的还原效果可高达95%。

非常之牛。升级以后,有收费用户速度来报,效果非常完美,把我给乐得。 继续阅读Discuz!x2接口的一点更新和未来功能开发设计

解决Discuz!X周期性抽风,实现Discuz!X自动清理缓存

哥们刚刚入职,管理公司的几个论坛,差点没让X1.5的UTF-8版本给整背过气去。

现在论坛一段时间后发现论坛周期性(大约每天2次)出现问题,页面title消失,登陆框错位,DIY模块内容消失等,搞得人好乱呐。

一直没有找到原因,但每次都是清理缓存过问题解决。

Discuz!X上一找,有问题的同志不少,而且都是UTF-8版(你说中国人最啥他要迷信UTF8版呐,模板少,插件少,问题多,占用资源多)。

没有时间做DX整体的代码跟踪,只好从表面上解决问题,那就是隔一段时间自动清理一下缓存。

于是开发了下面的计划任务,很简单,估计其它朋友也用得着,所以发上来分享下。

代码很安全,不要怀疑我的菊花。代码中也加了一些说明,有个性需求的同学可以修改下。

配置方法也很简单,不过我还是截图了,方便一些新同学。 继续阅读解决Discuz!X周期性抽风,实现Discuz!X自动清理缓存

跟大家讨论一个Discuz论坛合并的解决方案,看看有没有更好的解决办法

我自己有一个论坛,X1.5,25万用户,这几天买了一个论坛,7.2的,11万用户。

我想把两个论坛用户进行合并,看好了,是用户合并,不是两个论坛合并成一个论坛。 继续阅读跟大家讨论一个Discuz论坛合并的解决方案,看看有没有更好的解决办法

UCenter 应用开发简略指南

  你有PHP的开发基础?想把自己的程序集成到 UCenter?呵呵,来对了,看看这篇文章再动手吧,我会告诉你如何让自己的程序加入到 UCenter 的大家庭里。

  首先,自然是要下载一份UCenter 1.0.0 接口开发手册,而且要随时留意这个手册哦,它会随着 UCenter 版本的升级而更新。 继续阅读UCenter 应用开发简略指南