sync.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <?php
  2. require '../vendor/autoloader.php';
  3. require_once '../redis/function.php';
  4. $server = $_GET["server"];
  5. $localhost = $_GET["localhost"];
  6. $path=$_GET["path"];
  7. $time=$_GET["time"];
  8. $size=$_GET["size"];
  9. $output=["message"=>"","time"=>0,"src_row"=>0];
  10. $message = "<h3>正在处理 {$path}</h3>";
  11. $redis=redis_connect();
  12. if($redis){
  13. $sync_key = $redis->hget("sync://key",$_COOKIE["userid"]);
  14. if($sync_key===FALSE){
  15. $message.= "客户端没有钥匙"."<br>";
  16. $output["message"]=$message;
  17. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  18. exit;
  19. }
  20. }
  21. else{
  22. $message.= "redis连接失败"."<br>";
  23. $output["message"]=$message;
  24. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  25. exit;
  26. }
  27. $client = new \GuzzleHttp\Client();
  28. $response = $client->request('POST', $server.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'sync','time'=>$time,'size'=>$size,"key"=>$sync_key,"userid"=>$_COOKIE["userid"]]]);
  29. $serverJson=(string)$response->getBody();
  30. $serverData = json_decode($serverJson,true);
  31. if($serverData===NULL){
  32. $message.="无法解码 数据:".$serverJson;
  33. $output["message"]=$message;
  34. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  35. exit;
  36. }
  37. if($serverData["error"]>0){
  38. $message.=$serverData["message"];
  39. $output["message"]=$message;
  40. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  41. exit;
  42. }
  43. $message .= "<div>";
  44. $serverDBData = $serverData["data"];
  45. $output["src_row"]=count($serverDBData);
  46. $message.= "输入时间:".$time." | ";
  47. $message.= "src_row:".$output["src_row"]." | ";
  48. if($output["src_row"]>0){
  49. $output["time"]=$serverDBData[$output["src_row"]-1]["modify_time"];
  50. $message.= "最新时间:".$output["time"]." | ";
  51. }
  52. else{
  53. $message .= "没有查询到数据</div>";
  54. $output["message"]=$message;
  55. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  56. exit;
  57. }
  58. $aIdList=array();
  59. foreach($serverDBData as $sd){
  60. $aIdList[]=$sd["guid"];
  61. }
  62. $sIdlist = json_encode($aIdList, JSON_UNESCAPED_UNICODE);
  63. // 拉 id 列表
  64. $response = $client->request('POST', $localhost.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'sync','id'=>$sIdlist,'size'=>$size,"key"=>$sync_key,"userid"=>$_COOKIE["userid"]]]);
  65. $strLocalData = (string)$response->getBody();
  66. $localData = json_decode($strLocalData,true);
  67. if($localData["error"]>0){
  68. $message .= $localData["message"];
  69. $output["message"]=$message;
  70. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  71. exit;
  72. }
  73. $localDBData = $localData["data"];
  74. $localCount = count($localDBData);
  75. $message .= "local-row:".$localCount." | ";
  76. $message .= "</div>";
  77. $localindex=array();
  78. $insert_to_server=array();
  79. $update_to_server=array();
  80. $insert_to_local=array();
  81. $update_to_local=array();
  82. foreach($localDBData as $local){
  83. $localindex[$local["guid"]][0]=$local["modify_time"];
  84. $localindex[$local["guid"]][1]=false;
  85. }
  86. foreach($serverDBData as $sd){
  87. if(isset($localindex[$sd["guid"]])){
  88. $localindex[$sd["guid"]][1]=true;
  89. if($sd['modify_time']>$localindex[$sd["guid"]][0]){
  90. //服务器数据较新 server data is new than local
  91. $update_to_local[]=$sd["guid"];
  92. }
  93. else if($sd['modify_time']==$localindex[$sd["guid"]][0]){
  94. //"相同 same
  95. }
  96. else{
  97. //"服务器数据较旧 local data is new than server
  98. //$update_to_server[]=$sd->guid;
  99. }
  100. }
  101. else{
  102. //本地没有 新增 insert recorder in local
  103. $insert_to_local[]=$sd['guid'];
  104. }
  105. }
  106. foreach($localindex as $x=>$x_value){
  107. if($x_value[1]==false){
  108. //服务器新增 new data in server;
  109. //$insert_to_server[]=$x;
  110. }
  111. }
  112. $syncCount = count($insert_to_server)+count($update_to_server)+count($insert_to_local)+count($update_to_local);
  113. if($syncCount==0){
  114. $message .= "与服务器数据完全一致,无需更新。<br>";
  115. }
  116. else{
  117. //start sync
  118. if(count($insert_to_server)>0){
  119. /*
  120. */
  121. $message .= "需要插入服务器".count($insert_to_server)."条记录<br>";
  122. /*
  123. $idInLocal = json_encode($insert_to_server, JSON_UNESCAPED_UNICODE);
  124. $response = $client->request('POST', $localhost.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'get','id'=>"{$idInLocal}"]]);
  125. $localData=(string)$response->getBody();
  126. $response = $client->request('POST', $server.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'insert','data'=>"{$localData}"]]);
  127. $message .= (string)$response->getBody()."<br>";
  128. */
  129. }
  130. if(count($update_to_server)>0){
  131. /*
  132. */
  133. /*
  134. $message .= "需要更新到服务器".count($update_to_server)."条记录<br>";
  135. $idInLocal = json_encode($update_to_server, JSON_UNESCAPED_UNICODE);
  136. $response = $client->request('POST', $localhost.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'get','id'=>"{$idInLocal}"]]);
  137. $localData=(string)$response->getBody();
  138. $response = $client->request('POST', $server.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'update','data'=>"{$localData}"]]);
  139. $message .= (string)$response->getBody()."<br>";
  140. */
  141. }
  142. $message .= "<div>";
  143. if(count($insert_to_local)>0){
  144. $message .= "需要新增到本地".count($insert_to_local)."条记录 | ";
  145. #提取数据
  146. $idInServer = json_encode($insert_to_local, JSON_UNESCAPED_UNICODE);
  147. $response = $client->request('POST', $server.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'get','id'=>"{$idInServer}","key"=>$sync_key,"userid"=>$_COOKIE["userid"]]]);
  148. $serverData=(string)$response->getBody();
  149. $arrData = json_decode($serverData,true);
  150. if($arrData["error"]==0){
  151. $message .= "数据提取成功:{$arrData["message"]} | ";
  152. $strData = json_encode($arrData["data"], JSON_UNESCAPED_UNICODE);
  153. $response = $client->request('POST', $localhost.'/app/'.$path, ['verify' => false,'form_params'=>['op'=>'insert','data'=>"{$strData}","key"=>$sync_key,"userid"=>$_COOKIE["userid"]]]);
  154. $insertMsg = (string)$response->getBody();
  155. $arrInsertMsg = json_decode($insertMsg,true);
  156. $message .= $arrInsertMsg["message"] . " | ";
  157. }
  158. else{
  159. $message .= "数据提取错误 错误信息:{$arrData["message"]} ";
  160. }
  161. }
  162. $message .= "</div>";
  163. $message .= "<div>";
  164. if(count($update_to_local)>0){
  165. $message .= "需要更新到本地".count($update_to_local)."条记录 | ";
  166. $idInServer = json_encode($update_to_local, JSON_UNESCAPED_UNICODE);
  167. $response = $client->request('POST', $server.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'get','id'=>"{$idInServer}","key"=>$sync_key,"userid"=>$_COOKIE["userid"]]]);
  168. $serverData=(string)$response->getBody();
  169. $arrData = json_decode($serverData,true);
  170. if($arrData["error"]==0){
  171. $message .= "数据提取成功:{$arrData["message"]} | ";
  172. $strData = json_encode($arrData["data"], JSON_UNESCAPED_UNICODE);
  173. $response = $client->request('POST', $localhost.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'update','data'=>"{$strData}","key"=>$sync_key,"userid"=>$_COOKIE["userid"]]]);
  174. $strMsgUpdate = (string)$response->getBody();
  175. $arrMsgUpdate = json_decode($strMsgUpdate,true);
  176. $message .= $arrMsgUpdate["message"] . " | ";;
  177. }
  178. else{
  179. $message .= "数据提取错误 错误信息:{$arrData["message"]} ";
  180. }
  181. }
  182. $message .= "</div>";
  183. }
  184. $output["message"]=$message;
  185. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  186. ?>