本帖最后由 evenzhou 于 2011-6-29 22:55 编辑
首先打开模版uc_server/view/default/admin_app.htm
找到
- <script id="link_$app[appid]" testlink="admin.php?m=app&a=ping&inajax=1&url={eval echo urlencode($app['url']);}&ip={eval echo urlencode($app['ip']);}&appid=$app[appid]&random={eval echo rand()}"></script>
复制代码
打开:uc_server\control\admin\app.php
其中处理通信的函数为 onping()
- 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();';
- }
- }
复制代码 首先如果设置应用的物理路径(填写方式,如:http://localhost/x2/),则不用判断服务器是否开启了fsockopen,否则 需要判断fsockopen函数是否存在,下面来分析下 通信的测试的具体流程:
在onping函数中我们发现 test_api函数是关键,打开:uc_server/model/app.php- function test_api($url, $ip = '') {
- $this->base->load('misc');
- if(!$ip) {
- $ip = $_ENV['misc']->get_host_by_url($url);
- }
- if($ip < 0) {
- return FALSE;
- }
- return $_ENV['misc']->dfopen($url, 0, '', '', 1, $ip);
- }
复制代码 这段代码中调用的dfopen()函数:uc_server/model/misc.php
如果fsockopen函数不支持则直接返回 return '' ,否则按照流程执行并返回$return,最终 $status = $_ENV['app']->test_api($url, $ip);得到$status的值,进行判断是否为1,如果为1则通信成功,否则,通信失败
|