标签 云平台 下的文章

版块开启审核的情况下QQ互联无法自动同步的问题分析

下午排查发现一个站点开启了审核的情况下QQ互联无法自动同步的问题,特整理排查过程。

问题描述:

站点端开启了审核功能,所有发帖都先进入待审核状态,审核通过后才可以正常访问,发帖无法自动同步到空间和微博。

代码分析:

找到source/plugin/qqconnect/connect.class.php文件,可以搜索到如下触发自动同步的代码:

if((!getstatus($_G['forum_thread']['status'], 7) || !getstatus($_G['forum_thread']['status'], 8))
         && $_G['forum_thread']['displayorder'] >= 0 && $_G['member']['conisbind']
         && $_G['uid'] == $_G['forum_thread']['authorid']) {
    $_G['connect']['feed_log'] = DB::fetch_first("SELECT * FROM ".DB::table('connect_feedlog')." WHERE tid='$_G[tid]'");
    if($_G['connect']['feed_log']) {
        $_G['connect']['feed_interval'] = 300;
        $_G['connect']['feed_publish_max'] = 1000;
        if(getstatus($_G['connect']['feed_log']['status'], 1) || (getstatus($_G['connect']['feed_log']['status'], 2)
            && TIMESTAMP - $_G['connect']['feed_log']['lastpublished'] > $_G['connect']['feed_interval']
            && $_G['connect']['feed_log']['publishtimes'] < $_G['connect']['feed_publish_max'])) {
            $_G['connect']['feed_js'] = $feedlogstatus = true;
        }

        if(getstatus($_G['connect']['feed_log']['status'], 3) || (getstatus($_G['connect']['feed_log']['status'], 4)
            && TIMESTAMP - $_G['connect']['feed_log']['lastpublished'] > $_G['connect']['feed_interval']
            && $_G['connect']['feed_log']['publishtimes'] < $_G['connect']['feed_publish_max'])) {
            $_G['connect']['t_js'] = $tlogstatus = true;
        }

        if($feedlogstatus || $tlogstatus) {
            $status = $feedlogstatus ? setstatus(2, 1, $status) : $status;
            $status = $tlogstatus ? setstatus(4, 1, $status) : $status;
            DB::query("UPDATE ".DB::table('connect_feedlog')." SET status='$status', lastpublished='$_G[timestamp]', publishtimes=publishtimes+1 WHERE tid='$_G[tid]'");
        }
    }
}

其中的$_G['connect']['feed_js']和$_G['connect']['t_js']两个变量为控制是否触发自动同步到空间和微博的变量。
注意开头的if判断里的下面这句:

&& $_G['member']['conisbind'] && $_G['uid'] == $_G['forum_thread']['authorid']

这里要求是发帖人自己访问的时候才会触发自动同步的代码。

结论:

前面提到站点开启了审核功能,所有发帖都会先进入待审核状态,由管理人员审核通过后其他人才可以正常访问到。
当帖子被审核通过后,如果发帖人没有重新访问过自己的帖子,那么同样是不会自动同步到空间和微博的。

另外,自动同步的帖子是有时间限制的,如果发帖时间距当前时间超过12个小时,即使发帖人重新访问自己的帖子,这个时候也不会再触发自动同步了。

让Discuz! X2.5版QQ互联的QQ注册跳转到完善资料页的方法

Discuz! X2.5的QQ互联增加了QQ互联游客组,使没有注册的QQ通过QQ登录后变为QQ互联游客组,可以获得一些浏览帖子内容和部分附件的权限。
当用户需要进行登录后的某项操作时,才提示他进行完善资料或者绑定已有帐号。

鉴于论坛有很多人反馈想改回原来Discuz! X2.0的注册方法,直接完善资料进行注册。
特给出一个小的修改方案予以实现,QQ登录完后跳转到完善资料页。
找到source\plugin\qqconnect\connect\connect_login.php文件,搜索代码

$utilService->redirect($referer);

改为

dheader('Location:member.php?mod=connect&referer=index.php');

云平台常见报错的解决方法

之前负责云平台版块,一直想要将云平台的常见问题总结下来方便大家排查解决问题。
由于各种原因,一直没时间全面的总结,大家遇到问题建议还是到官方论坛搜索一下,很多问题之前其实都已经解决了,并给出了相应的解决方法。

最近又发现有站长反应搬家后云平台出现问题,云平台报错如下:

出了点小错,由于站点ID/通信KEY等关键信息丢失导致Discuz!云平台服务出现异常,使用诊断工具检测站点ID和KEY,如有疑问请访问官方论坛寻求帮助

搬家同时更换了域名的情况:
1.有搬家前的数据库备份的情况,在备份数据中执行下面的sql。

SELECT `svalue` FROM `pre_common_setting` WHERE `skey` in ('my_siteid', 'my_sitekey')

查询出来的为当前的站点ID、KEY,请做好这两个值的备份。
然后进入新域名站点后台->云平台->诊断工具下,点击手动修改站点ID/KEY,如图。
[caption id="attachment_740" align="alignnone" width="300" caption="云平台诊断工具"]云平台诊断工具[/caption]

在弹层里填入前面查询的站点ID和站点KEY,同时将云平台的状态改为已开通,提交保存。
[caption id="attachment_741" align="alignnone" width="300" caption="云平台诊断工具"]云平台诊断工具[/caption]

然后进入新域名站点后台->云平台->站点信息下,点击同步站点信息。同步成功后,您的站点ID对应的域名就变成了您的新域名。

2.没有搬家前的数据库备份的情况,请将原来开通云平台的域名重新指向新域名的站点。然后通过老域名访问站点后台->云平台->诊断工具,点击手动修改站点ID/KEY,如图。
[caption id="attachment_742" align="alignnone" width="218" caption="云平台诊断工具"]云平台诊断工具[/caption]

在弹层里将站点ID/KEY删掉,同时将云平台的状态改为尚未开通云平台,提交保存。如果您的诊断工具里的状态没有站点ID/KEY,同时云平台状态已经是尚未开通就不用进行前面的操作。

然后使用老域名进入站点后台->云平台->云平台首页进行开通云平台,这时候会提示重复注册。按提示下载修复文件,然后上传到网站根目录下,使用老域名访问修复文件,按照提示找回站点ID/KEY即可。找回后,使用新域名访问站点后台->云平台->站点信息,点击同步站点信息。同步成功后,您的站点ID对应的域名就变成了您的新域名。

只是进行搬家,并没更换域名的情况:
您可以按上面的第2种方法进行自行找回ID/KEY。

其他情况请到官方发帖求助,请求官方协助解决。

云平台诊断工具里所有接口请求失败的问题排查

此方法只适用于X2.5版本。

其他版本问题请参考此贴。
http://www.discuz.net/thread-2264405-1-1.html

排查方法:
找到source\function\function_filesock.php文件

搜索代码

if(function_exists('curl_init') && $allowcurl) {

改为

if(function_exists('curl_init') && function_exists('curl_exec') && $allowcurl) {

原因:空间商禁用了curl_exec 函数导致。

调用远程接口失败报错分析及验证方法

问题描述:
在开通云平台或者开启/关闭某个云平台服务的时候,云平台报下面的错误:
调用远程接口失败。请检查您的服务器是否处于内网以及您服务器的防火墙设置。

出现此类问题的可能原因:
1.没有开放80端口,云平台只允许访问80端口。
非80端口的站点请改为80端口开通。

2.您的网站处于内网。
云平台只能在外网使用,请在外网搭建站点再进行开通。

3.接口文件无法访问或输出不正确。
接口文件为:您的论坛地址/api/manyou/my.php,您可以试着在浏览器里访问接口文件看是否可以正常访问。
类似的输出如下:

4.服务器上有防火墙,拦截了云平台与站点间接口文件的通信。
云平台是通过curl的方式去请求站点的接口文件,有些空间商可能对此做了限制,可咨询空间商。

5.域名还未完全生效。
如果您是使用一个刚申请的域名开通云平台,这种情况下可能是域名还未完全生效,建议您等24小时再进行开通操作。

6.云平台回调论坛方法的操作时间超时。
在开通/关闭的操作中,云平台会回调论坛的方法进行更新缓存等操作,此步操作可能超时,导致云平台没有收到正确的返回值。
此类可参考之前一个的问题分析:http://www.liudon.org/?p=102

如果出现此类报错,站长可以按下面的方法自行进行一下验证,检查问题是出在云平台访问站点接口文件还是云平台回调论坛方法上。

验证方法:
x2版本:
找到api\manyou\my.php文件,搜索代码

$my->run();

这句代码下面添加代码

file_put_contents('./d.txt', '云平台访问接口文件成功!');

修改后,进入站点后台->云平台下进行开通云平台或者开启/关闭某些云平台服务的操作,这个时候仍会报调用远程接口失败的错误。
这个时候进入网站目录/api/manyou目录下,检查是否有d.txt文件,里面的内容应该是“云平台访问接口文件成功!”。

如果存在d.txt,则说明云平台可以正常访问站点的接口文件,问题出在云平台回调论坛方法这里。这种情况大部分都会在更新缓存这里,可以参考这个方法修改试下:http://www.liudon.org/?p=102

如果没有生成d.txt,则说明云平台无法访问站点的接口文件,问题处在云平台访问站点接口文件这里。云平台无法访问站点的接口文件的原因,可能是服务器上有防火墙或者新域名还未完全生效。

建议您按上面的验证方法自行进行一下验证,如果自己解决不了,希望您在官方发帖求助的时候可以贴上您验证的结果,方便我们定位问题。