Discuz! 官方站

 

 

Discuz! X 最新研发动态!实时更新 通过这个窗口,关注跟踪我们的研发进展 查看最新动态我来给官方提建议

Discuz! X1 正式版发布 帮助网站实现一站式服务 下载安装常见问题转换 - 讨论

Comsenz 产品服务购买2010 互联网社区调查活动 PHP培训5d6d免费论坛Discuz!NT3.1发布 Yeswan-绑定域名插件漫游应用收入排行

搜索
Discuz! 官方站 广场 UCenter-帮助文档 UCenter 通信失败 和 无法同步登陆的调试方法
查看: 36096|回复: 46
go

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

Rank: 12Rank: 12Rank: 12

积分
3628 
UID
15104 
帖子
2864 
威望
100  
金币
171 个 
体力
1497  
激情
1470  
注册时间
2003-5-13 
楼主
发表于 2009-8-21 10:22 |只看该作者 |倒序看帖 |打印
本帖最后由 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、摸到瓜了吧,接下来对症下药是不是很简单了。
记得去掉刚才的调试代码。


下一节讲无法同步登陆的调试步骤
知耻而后勇

Rank: 12Rank: 12Rank: 12

积分
3628 
UID
15104 
帖子
2864 
威望
100  
金币
171 个 
体力
1497  
激情
1470  
注册时间
2003-5-13 
沙发
发表于 2009-8-21 10:23 |只看该作者
占个位置,接着开讲同步登陆的调试。
知耻而后勇

Rank: 2

积分
78 
UID
432374 
帖子
97 
威望
0  
金币
0 个 
体力
70  
激情
101  
注册时间
2006-9-4 
藤椅
发表于 2009-8-21 10:36 |只看该作者

Rank: 2

积分
71 
UID
880154 
帖子
85 
威望
0  
金币
2 个 
体力
64  
激情
128  
注册时间
2008-1-12 
板凳
发表于 2009-8-21 13:38 |只看该作者

Rank: 8Rank: 8

积分
3938 
UID
1028627 
帖子
4656 
威望
0  
金币
142 个 
体力
53  
激情
4608  
注册时间
2008-11-25 
报纸
发表于 2009-8-21 14:01 |只看该作者

Rank: 4

积分
646 
UID
849492 
帖子
596 
威望
0  
金币
113 个 
体力
393  
激情
391  
注册时间
2007-11-1 
地板
发表于 2009-8-26 12:42 |只看该作者
[url=http://www.tt193.com/home.php?mod=space&do=album]性感小野猫[/url]

Rank: 1

积分
22 
UID
1231169 
帖子
28 
威望
0  
金币
0 个 
体力
4  
激情
27  
注册时间
2009-8-12 
7#
发表于 2009-8-26 19:08 |只看该作者

Rank: 2

积分
131 
UID
1049807 
帖子
85 
威望
0  
金币
42 个 
体力
36  
激情
81  
注册时间
2008-12-28 
8#
发表于 2009-8-29 16:59 |只看该作者

Rank: 1

积分
13 
UID
1132363 
帖子
16 
威望
0  
金币
0 个 
体力
0  
激情
17  
注册时间
2009-4-29 
9#
发表于 2009-8-30 18:08 |只看该作者

Rank: 12Rank: 12Rank: 12

积分
3628 
UID
15104 
帖子
2864 
威望
100  
金币
171 个 
体力
1497  
激情
1470  
注册时间
2003-5-13 
10#
发表于 2009-8-31 11:24 |只看该作者
会有下文的,别急。我得抽时间写。我都快24小时连轴转了。呵呵
知耻而后勇
‹ 上一主题|下一主题

Archiver|Comsenz Technology Ltd. ( 京ICP备05079575号|京ICP证040387号 )

GMT+8, 2010-9-3 03:57 , Processed in 0.116595 second(s), 8 queries , Memcache On.

Powered by Discuz! X1.5RC

© 2001-2010 Comsenz Inc.