Thinkphp整合Discuz_X3.2,无法正常调用Ucenter函数

本人是新手,在Thinkphp 整合Discuz_3.2时,调用UCenter的函数时,怎么也无法成功,折腾了好久,终于成功了,在这里记录一下。

环境:Thinkphp3.1+Discuz_X3.2

    public function mylogin(){
        include '/bbs/uc_server/data/config.inc.php';
        include '/bbs/uc_client/client.php';
        $tc = uc_get_user('admin');
        dump($tc);
    }
就是这段简单的测试调用UCenter函数时,输出总是为空,无法正常调用函数,而且没有任何错误提示。UCenter的通信是正常的,而且相应的用户数据也已经正常的添加到了UCenter的数据表当中。

这个问题的解决方法主要是以下几步:

1、解决传说的Discuz中db类base类与Thinkphp中的同名冲突问题,可以具体参看这个解决方法:http://wenku.baidu.com/view/120ea8e9551810a6f5248601.html。因为3.2的Discuz已经对db类进行了重命名,实际上只要解决base类的重名问题就可以了。

2、根据client.php中的函数源码:

function uc_get_user($username, $isuid=0) {
	$return = call_user_func(UC_API_FUNC, 'user', 'get_user', array('username'=>$username, 'isuid'=>$isuid));
	return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return);
}

以及

define('UC_API_FUNC', UC_CONNECT == 'mysql' ? 'uc_api_mysql' : 'uc_api_post');
uc_get_user这个函数实际上是根据参数调用uc_api_mysql或者uc_api_post这两个函数(这两个函数的区别好像是:mysql适合于Discuz和Thinkphp在同一个服务器下的情况,而post适合于不同的服务器,而且post的效率相对要慢一些),而具体调用哪一个是在config.inc.php配置文件中设置的。在我的环境下,测试出实际调用的是post,因此改用mysql那个函数尝试。而在我的config.inc.php中并没有设置这个值,只是在config_ucenter.php制定了这个值,因此将config_ucenter.php中的”define('UC_CONNECT', 'mysql');”这行代码复制到config.inc.php当中,这样改完终于可以看到错误了!错误提示如下:

UCenter info: MySQL Query Error
SQL:SELECT value FROM [Table]vars WHERE name='noteexistsUC_APPID'
Error:No database selected
Errno:1046
百度了一下,这个问题的解决方法是:更改config.inc.php中的“define('UC_DBTABLEPRE', 'pre_ucenter_');”这行代码为:“define('UC_DBTABLEPRE', '`travel`.pre_ucenter_');”,其中“travel”是具体你的数据库的名称。这样修改完以后终于可以看到正常的调用结果了!!!!



你可能感兴趣的:(PHP)