基于Ucenter的单点登录系统开发过程(二)

1013

4
今天突然意识到一个问题:只有当app是数据库方式连接到ucenter-server时才会有写数据库操作,如果是api-post方式连接会怎样呢?
于是通过example研究,顺藤摸瓜,发现这个对mysql还是api-post的选择,是在uc_client/client.php中通过一个三目运算实现的,所有api在运作前都是先检查了一次连接方式。
貌似每一次相关操作都是通过call_user_func()函数实现了,一开始以为这是个自定义函数,结果后来搜索才知道,这个是php自带的函数,是一个特殊的函数调用方法。
http://php.net/manual/zh/function.call-user-func.php

也就是说,所有操作都是在调用两个函数——uc_api_mysql 和 uc_api_post,先看uc_api_post吧,毕竟app分部在几个服务器上。

function uc_api_post($module, $action, $arg = array()) {
	$s = $sep = '';
	foreach($arg as $k => $v) {
		$k = urlencode($k);
		if(is_array($v)) {
			$s2 = $sep2 = '';
			foreach($v as $k2 => $v2) {
				$k2 = urlencode($k2);
				$s2 .= "$sep2{$k}[$k2]=".urlencode(uc_stripslashes($v2));
				$sep2 = '&';
			}
			$s .= $sep.$s2;
		} else {
			$s .= "$sep$k=".urlencode(uc_stripslashes($v));
		}
		$sep = '&';
	}
	$postdata = uc_api_requestdata($module, $action, $s);
	return uc_fopen2(UC_API.'/index.php', 500000, $postdata, '', TRUE, UC_IP, 20);
}

UC_API是config中定义的Ucenter-server url地址,这个目测就是向Ucenter-server post数据的函数。
貌似扯远了,回到正题。

留下一个答复

Please enter your comment!
Please enter your name here