sync.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php
  2. require '../vendor/autoloader.php';
  3. $server = $_GET["server"];
  4. $localhost = $_GET["localhost"];
  5. $path=$_GET["path"];
  6. $time=$_GET["time"];
  7. $message="";
  8. $response=["message"=>"","time"=>0,"row"=>0];
  9. $client = new \GuzzleHttp\Client();
  10. $response = $client->request('POST', $server.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'sync','time'=>$time]]);
  11. $serverJson=$response->getBody();
  12. $serverData = json_decode($serverJson);
  13. $response["row"]=count($serverData);
  14. if($response["row"]>0){
  15. $response["time"]=$serverData[$response["row"]-1]->modify_time;
  16. }
  17. else{
  18. echo json_encode($response, JSON_UNESCAPED_UNICODE);
  19. exit;
  20. }
  21. $aIdList=array();
  22. foreach($serverData as $sd){
  23. $aIdList[]=$sd->guid;
  24. }
  25. $sIdlist = implode(",",$aIdList);
  26. // 拉 id 列表
  27. $response = $client->request('POST', $localhost.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'sync','id'=>$sIdlist]]);
  28. $strLocalData = $response->getBody();
  29. $localData = json_decode($strLocalData);
  30. $localindex=array();
  31. $insert_to_server=array();
  32. $update_to_server=array();
  33. $insert_to_local=array();
  34. $update_to_local=array();
  35. $message .= "<h3>{$path}</h3>";
  36. foreach($localData as $local){
  37. $localindex[$local->guid][0]=$local->modify_time;
  38. $localindex[$local->guid][1]=false;
  39. }
  40. foreach($serverData as $sd){
  41. if(isset($localindex[$sd->guid])){
  42. $localindex[$sd->guid][1]=true;
  43. if($sd->modify_time>$localindex[$sd->guid][0]){
  44. //服务器数据较新 server data is new than local
  45. $update_to_local[]=$sd->guid;
  46. }
  47. else if($sd->modify_time==$localindex[$sd->guid][0]){
  48. //"相同 same
  49. }
  50. else{
  51. //"服务器数据较旧 local data is new than server
  52. $update_to_server[]=$sd->guid;
  53. }
  54. }
  55. else{
  56. //服务器新增 new recorder in server
  57. $insert_to_local[]=$sd->guid;
  58. }
  59. }
  60. foreach($localindex as $x=>$x_value){
  61. if($x_value[1]==false){
  62. //客户端新增 new data in local;
  63. $insert_to_server[]=$x;
  64. }
  65. }
  66. $syncCount = count($insert_to_server)+count($update_to_server)+count($insert_to_local)+count($update_to_local);
  67. if($syncCount==0){
  68. $message .= "与服务器数据完全一致,无需更新。<br>";
  69. }
  70. else{
  71. //start sync
  72. if(count($insert_to_server)>0){
  73. /*
  74. */
  75. $message .= "需要插入服务器".count($insert_to_server)."条记录<br>";
  76. $idInLocal = json_encode($insert_to_server, JSON_UNESCAPED_UNICODE);
  77. $response = $client->request('POST', $localhost.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'get','id'=>"{$idInLocal}"]]);
  78. $localData=$response->getBody();
  79. $response = $client->request('POST', $server.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'insert','data'=>"{$localData}"]]);
  80. $message .= $response->getBody()."<br>";
  81. }
  82. if(count($update_to_server)>0){
  83. /*
  84. */
  85. $message .= "需要更新到服务器".count($update_to_server)."条记录<br>";
  86. $idInLocal = json_encode($update_to_server, JSON_UNESCAPED_UNICODE);
  87. $response = $client->request('POST', $localhost.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'get','id'=>"{$idInLocal}"]]);
  88. $localData=$response->getBody();
  89. $response = $client->request('POST', $server.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'update','data'=>"{$localData}"]]);
  90. $message .= $response->getBody()."<br>";
  91. }
  92. if(count($insert_to_local)>0){
  93. $message .= "需要新增到本地".count($insert_to_local)."条记录<br>";
  94. $idInServer = json_encode($insert_to_local, JSON_UNESCAPED_UNICODE);
  95. $response = $client->request('POST', $server.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'get','id'=>"{$idInServer}"]]);
  96. $serverData=$response->getBody();
  97. $response = $client->request('POST', $localhost.'/app/'.$path, ['verify' => false,'form_params'=>['op'=>'insert','data'=>"{$serverData}"]]);
  98. $message .= $response->getBody()."<br>";
  99. }
  100. if(count($update_to_local)>0){
  101. $message .= "需要更新到本地".count($update_to_local)."条记录<br>";
  102. $idInServer = json_encode($update_to_local, JSON_UNESCAPED_UNICODE);
  103. $response = $client->request('POST', $server.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'get','id'=>"{$idInServer}"]]);
  104. $serverData=$response->getBody();
  105. $response = $client->request('POST', $localhost.'/app/'.$path,['verify' => false,'form_params'=>['op'=>'update','data'=>"{$serverData}"]]);
  106. $message .= $response->getBody()."<br>";
  107. }
  108. }
  109. $response["message"]=$message;
  110. ?>