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数据的函数。
貌似扯远了,回到正题。