ajaxgetclientpackage.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. class myMisc extends misc
  3. {
  4. /**
  5. * Ajax get client package.
  6. *
  7. * @param string $os
  8. * @access public
  9. * @return void
  10. */
  11. public function ajaxGetClientPackage($os = '')
  12. {
  13. ini_set('memory_limit', '256M'); // Temporarily handle the problem that the ZenTao client file is too large.
  14. set_time_limit (0);
  15. session_write_close();
  16. $response = array();
  17. $response['result'] = 'success';
  18. $response['message'] = '';
  19. $clientDir = $this->app->wwwRoot . 'data/client/';
  20. if(!is_dir($clientDir)) mkdir($clientDir, 0755, true);
  21. $version = $this->config->xuanxuan->version;
  22. $packageDir = $clientDir . "/$version/";
  23. if(!is_dir($packageDir)) mkdir($packageDir, 0755, true);
  24. $account = $this->app->user->account;
  25. $tmpDir = $clientDir . "/$account/";
  26. if(!is_dir($tmpDir)) mkdir($tmpDir, 0755, true);
  27. $needCache = false;
  28. $clientName = "zentaoclient." . $os . ".zip";
  29. $packageFile = $packageDir . $clientName;
  30. if(!file_exists($packageFile))
  31. {
  32. $url = "https://dl.zentao.net/zentaoclient/$version/";
  33. $xxFile = $url . $clientName . "?t=" . rand();
  34. $needCache = true;
  35. }
  36. else
  37. {
  38. $xxFile = $packageFile;
  39. }
  40. $clientFile = $tmpDir . 'zentaoclient.zip';
  41. if($xxHd = fopen($xxFile, "rb"))
  42. {
  43. if($clientHd = fopen($clientFile, "wb"))
  44. {
  45. while(!feof($xxHd))
  46. {
  47. $result = fwrite($clientHd, fread($xxHd, 1024 * 8 ), 1024 * 8 );
  48. if($result == false)
  49. {
  50. $response['result'] = 'fail';
  51. $response['message'] = sprintf($this->lang->misc->client->errorInfo->manualOpt, $xxFile);
  52. $this->send($response);
  53. }
  54. }
  55. }
  56. else
  57. {
  58. $response['result'] = 'fail';
  59. $response['message'] = sprintf($this->lang->misc->client->errorInfo->manualOpt, $xxFile);
  60. $this->send($response);
  61. }
  62. fclose($xxHd);
  63. fclose($clientHd);
  64. }
  65. else
  66. {
  67. $response['result'] = 'fail';
  68. $response['message'] = sprintf($this->lang->misc->client->errorInfo->manualOpt, $xxFile);
  69. $this->send($response);
  70. }
  71. if($needCache) file_put_contents($packageFile, file_get_contents($clientFile));
  72. $this->send($response);
  73. }
  74. }