请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Discuz! 官方站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

Discuz! X 最新研发动态 通过这个窗口,关注跟踪我们的研发进展 Discuz! 开发技术文库 - 给官方提建议

Discuz! X2 正式版下载 帮助网站实现一站式服务  商业支持服务咨询 下载 - 安装 - 常见问题 - 转换 - 讨论 - 购买

2012站长年会开启报名 限量船票免费发放 Discuz!十大荣誉用户评选 - Discuz!NT3.6发布 漫游引入QQ空间游戏 -火影首服火爆开启-5d6d免费论坛

查看: 67564|回复: 68

UCenter 通信失败 和 无法同步登陆的调试方法   [复制链接]

Rank: 12Rank: 12Rank: 12

UID
15104
积分
3694
帖子
2861
威望
100
在线时间
16 小时
注册时间
2003-5-13
发表于 2009-8-21 10:22:23 |显示全部楼层
本帖最后由 redstone 于 2009-8-21 10:31 编辑

程序开发必不可少的要去调试。问题可能是多种多样的,所以需要我们自己能找到解决问题的方法。
一、通信失败如何调试 如下图所示
1.gif

看到这个不要怕,其实问题远没有你想的那么复杂

既然是调试,就是刨根问底,就是顺藤摸瓜,那就先找个到藤
注:本教程使用Firefox浏览器,这里不是给他AD,是Firefox的一系列调试工具我用的比较熟练

1、我们先看看“通信失败”这四个字是怎么来的?
大家有没有感觉这个通信失败或者通信成功是在页面加载之后才显示出来的。对这个地方并不是页面直接输出的。而是页面重新去加载js去判断之后显示的。
我们来看这个页面的源代码。ie下可以直接点击右键查看源文件,firefox需要选择 本帧 --》查看帧源代码。
2.gif


之后我们在源代码中找到刚才显示通信失败的那个标签。这个不难吧。如下图所示
3.gif


这个通信状态就是图中高亮的那个js处理的结果。看上去和正常的js调用不一样。别怕,看这个源码的开始那个js代码。
  1. <script type="text/javascript">
  2. var apps = new Array();
  3. var run = 0;
  4. function testlink() {
  5.         if(apps[run]) {
  6.                 $('status_' + apps[run]).innerHTML = '正在连接...';
  7.                 $('link_' + apps[run]).src = $('link_' + apps[run]).getAttribute('testlink') + '&sid=433eRJFCviO87jtvTWbCz%2FFxfYPPjAcxKUBBQ7JgcgnCuUJcfCbkS0xrgdXuA5ziYZRkXcy%2F2N77HA';
  8.         }
  9.         run++;
  10. }
  11. window.onload = testlink;
  12. </script>
复制代码
明白了吧。

2、既然“藤”找到了,那我们就开始“摸”吧
copy这段代码直接通过浏览器访问。
4.gif


这下明白那个通信失败四个字就来源于此了吧。呵呵。
但是还是不知道为啥失败啊?
别急,还没有摸到瓜,我不喊停你就继续摸啊。

接下来就要在uc的代码中设置几个断点,其实就是 echo 之后die。
我们来看当前的url地址。
  1. http://uc.860472.com/admin.php?m=app&a=ping&inajax=1&url=http%3A%2F%2Fwww.860472.com&ip=&appid=1&random=1377646808
复制代码
m=app 就代表着这个控制器原型是 app,因为是后台的访问,因此对应的就是 ucenter 目录下的 ./control/admin/app.php
a=ping 代表着执行的是控制器原型中的 onping 方法
注:这个如果想刨根问底的同学可以去看入口程序admin.php

好,有向前了一小步,我们打开  ./control/admin/app.php 文件,找到 onping 方法,源码如下:
  1.         function onping() {
  2.                 $ip = getgpc('ip');
  3.                 $url = getgpc('url');
  4.                 $appid = intval(getgpc('appid'));
  5.                 $app = $_ENV['app']->get_app_by_appid($appid);
  6.                 $status = '';
  7.                 if($app['extra']['apppath'] && @include $app['extra']['apppath'].'./api/'.$app['apifilename']) {
  8.                         $uc_note = new uc_note();
  9.                         $status = $uc_note->test($note['getdata'], $note['postdata']);
  10.                 } else {
  11.                         $this->load('note');
  12.                         $url = $_ENV['note']->get_url_code('test', '', $appid);
  13.                         $status = $_ENV['app']->test_api($url, $ip);
  14.                 }
  15.                 if($status == '1') {
  16.                         echo 'document.getElementById(\'status_'.$appid.'\').innerHTML = "<img src=\'images/correct.gif\' border=\'0\' class=\'statimg\' \/><span class=\'green\'>'.$this->lang['app_connent_ok'].'</span>";testlink();';
  17.                 } else {
  18.                         echo 'document.getElementById(\'status_'.$appid.'\').innerHTML = "<img src=\'images/error.gif\' border=\'0\' class=\'statimg\' \/><span class=\'red\'>'.$this->lang['app_connent_false'].'</span>";testlink();';
  19.                 }

  20.         }
复制代码
这个代码我就不一一解释了。用点心,仔细一点都能看明白。
我们可以看到这个$status 等于1的时候会输出通信成功,除此之外输出通信失败。
好,那我们直接输出这个 $status ,看看不等于1的时候他是个什么东东。

  1. if($status == '1') {
复制代码
前面添加一行代码
  1. echo "\$url = $url <br />\n \$status = $status<br />\n";die('haha');
复制代码
好的,断点也设置了,之后保存代码重新去刷新刚才的页面。

3、终于快摸到“瓜”了,有点小兴奋,原来调试也不难吧。
刷新页面后看到这样的东东
5.gif


哦。原来是我的这个应用的访问地址弄错了。

4、摸到瓜了吧,接下来对症下药是不是很简单了。
记得去掉刚才的调试代码。


下一节讲无法同步登陆的调试步骤
已有 1 人评分金币 收起 理由
eqmz + 1 我很赞同

总评分: 金币 + 1   查看全部评分

知耻而后勇

Rank: 12Rank: 12Rank: 12

UID
15104
积分
3694
帖子
2861
威望
100
在线时间
16 小时
注册时间
2003-5-13
发表于 2009-8-21 10:23:23 |显示全部楼层
本帖最后由 redstone 于 2011-1-21 17:31 编辑

占个位置,接着开讲同步登陆的调试。

大家也可以加QQ群:70925104 来交流UCenter相关问题或者其他的技术问题
知耻而后勇

使用道具 举报

Rank: 2

UID
432374
积分
95
帖子
100
威望
0
在线时间
4 小时
注册时间
2006-9-4
发表于 2009-8-21 10:36:58 |显示全部楼层
顶起来!

使用道具 举报

Rank: 2

UID
880154
积分
74
帖子
85
威望
0
在线时间
1 小时
注册时间
2008-1-12
发表于 2009-8-21 13:38:35 |显示全部楼层
搬个凳子等你下面的讲解

使用道具 举报

Rank: 8Rank: 8

UID
1028627
积分
3936
帖子
4640
威望
0
在线时间
2 小时
注册时间
2008-11-25
发表于 2009-8-21 14:01:59 |显示全部楼层
很好·· 支持

使用道具 举报

Rank: 6Rank: 6

UID
849492
积分
1051
帖子
744
威望
0
在线时间
206 小时
注册时间
2007-11-1
发表于 2009-8-26 12:42:46 |显示全部楼层
下文在何处?
[url=http://www.tt193.com/home.php?mod=space&do=album]性感小野猫[/url]

使用道具 举报

Rank: 1

UID
1231169
积分
29
帖子
30
威望
0
在线时间
2 小时
注册时间
2009-8-12
发表于 2009-8-26 19:08:18 |显示全部楼层
新人有难度`~唉~

使用道具 举报

Rank: 2

UID
1049807
积分
131
帖子
85
威望
0
在线时间
0 小时
注册时间
2008-12-28
发表于 2009-8-29 16:59:10 |显示全部楼层
说说同步登陆啊

使用道具 举报

Rank: 1

UID
1132363
积分
26
帖子
17
威望
0
在线时间
3 小时
注册时间
2009-4-29
发表于 2009-8-30 18:08:34 |显示全部楼层
文在何处?

使用道具 举报

Rank: 12Rank: 12Rank: 12

UID
15104
积分
3694
帖子
2861
威望
100
在线时间
16 小时
注册时间
2003-5-13
发表于 2009-8-31 11:24:11 |显示全部楼层
会有下文的,别急。我得抽时间写。我都快24小时连轴转了。呵呵
知耻而后勇

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

fastpost

手机版|Archiver|北京康盛新创科技有限责任公司 ( 京ICP证110024号|京网文[2011]0019-007号 )  

GMT+8, 2012-2-4 10:10 , Processed in 0.108250 second(s), 17 queries , Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部