sync.php 3.8 KB

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