Discuz!大师网

搜索
查看: 1152|回复: 0

【实例】Discuz与UCenter通信失败的解决方法

[复制链接]
发表于 2017-3-21 01:26:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如图:在本地安装discuz后发现通信失败:
Center.jpg

审查元素通信失败四个字:
Center.jpg

代码:

[php] view plain copy

                               
登录/注册后可看大图

                               
登录/注册后可看大图


  • <td width="90">  
  •     <div id="status_1">  
  •         <img src="images/error.gif" border="0" class="statimg">  
  •         <span class="red">通信失败</span>  
  •     </div>  
  •     <script id="link_1" testlink="admin.php?m=app&a=ping&inajax=1&url=http%3A%2F%2Fwww.mydiscuz.com&ip=127.0.0.1&appid=1&random=1032231015" src="admin.php?m=app&a=ping&inajax=1&url=http%3A%2F%2Fwww.mydiscuz.com&ip=127.0.0.1&appid=1&random=1032231015&sid=1b715zSrkN2F%2Bc3pyGJHGoBkkHjweVCgI%2F%2Fqp6hTtFO%2FLwdxQUAlXyrtWpKBfYGknm%2BuHEnWyOaYWQ"></script>  
  •     <script>apps[0] = '1';</script>  
  • </td>  


从上面的testlink右健点击进去的页面如下:
Center.jpg


我们来看当前的url地址:


[html] view plain copy

                               
登录/注册后可看大图

                               
登录/注册后可看大图


  • http://www.ucserver.com/admin.php?m=app&a=ping&inajax=1&url=http%3A%2F%2Fwww.mydiscuz.com&ip=127.0.0.1&appid=1&random=1032231015&sid=1b715zSrkN2F%2Bc3pyGJHGoBkkHjweVCgI%2F%2Fqp6hTtFO%2FLwdxQUAlXyrtWpKBfYGknm%2BuHEnWyOaYWQ  


m=app 就代表着这个控制器原型是 app,因为是后台的访问,因此对应的就是 ucenter 目录下的 ./control/admin/app.PHP

a=ping 代表着执行的是控制器原型中的 onping 方法

注:这个如果想刨根问底的同学可以去看入口程序admin.php

好,有向前了一小步,我们打开 ./control/admin/app.php 文件,找到 onping 方法,源码如下:
[php] view plain copy

                               
登录/注册后可看大图

                               
登录/注册后可看大图


  • function onping() {  
  •     $ip = getgpc('ip');  
  •     $url = getgpc('url');  
  •     $appid = intval(getgpc('appid'));  
  •     $app = $_ENV['app']->get_app_by_appid($appid);  
  •     $status = '';  
  •     if($app['extra']['apppath'] && @include $app['extra']['apppath'].'./api/'.$app['apifilename']) {  
  •         $uc_note = new uc_note();  
  •         $status = $uc_note->test($note['getdata'], $note['postdata']);  
  •     } else {  
  •         $this->load('note');  
  •         $url = $_ENV['note']->get_url_code('test', '', $appid);  
  •         $status = $_ENV['app']->test_api($url, $ip);  
  •     }  
  •     if($status == '1') {  
  •         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();';  
  •     } else {  
  •         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();';  
  •     }  
  •   
  • }  


我们可以看到这个$status 等于1的时候会输出通信成功,除此之外输出通信失败。 好,那我们直接输出这个 $status ,看看不等于1的时候他是个什么东东。 在if($status == '1') 上面打印下$url和$status :  [php] view plain copy

                               
登录/注册后可看大图

                               
登录/注册后可看大图


  • echo "\$url = $url <br />\n \$status = $status<br />\n";  

之后保存代码重新去刷新刚才的页面。
Center.jpg
原来是没有/api/uc.php文件的权限,进入目录查看下:
Center.jpg

apache没有权限,修改下权限:

[php] view plain copy

                               
登录/注册后可看大图

                               
登录/注册后可看大图


  • chmod g+r+w+x -R api  


修改后刷新下,发现通信成功:
Center.jpg

查看另外一个应用的错误信息,发现错误如下:
Center.jpg

原来是数据库连不上,查看后发现配置文件写错了,改好后通信就成功了。

回复 马甲回复

使用道具 举报

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

本版积分规则

QQ|网站地图|小黑屋|展会网|Discuz站长论坛 |天天打卡

GMT+8, 2024-4-29 20:11 , Processed in 0.029060 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表