PackageClass.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <?php
  2. namespace DistributeHelper;
  3. error_reporting(E_ALL & ~E_NOTICE);
  4. include "Utility.php";
  5. class PackageClass
  6. {
  7. //当所有包都安装完毕后
  8. public static function index($vendorDir,$repoName){
  9. //设置日志文件路径
  10. if(! defined(LOG_PATH)){
  11. define('LOG_PATH',getLogPath($vendorDir))
  12. }
  13. //获取配置信息
  14. $cfgPath = getConfigPath($vendorDir);
  15. $config = loadConfig($cfgPath);
  16. if(!$config){
  17. printf("Failed to load distribute config -- %s\n",$cfgPath);
  18. exit();
  19. }
  20. //获取当前包信息
  21. $packageInfo = self::getPackageInfo($config,$vendorDir,$repoName);
  22. //获取当前包的module文件
  23. self::fetchModuleFiles($packageInfo);
  24. //获取当前包的common文件
  25. self::fetchCommonFiles($packageInfo);
  26. //获取当前包的config文件
  27. self::fetchConfigFiles($packageInfo);
  28. //顶层包的额外工作
  29. if($repoName == ""){
  30. //注册全局路径
  31. self::registerPath($packageInfo);
  32. //注册自启动程序
  33. self::registerAutorun($packageInfo);
  34. }
  35. }
  36. //获取包相关信息
  37. private static function getPackageInfo($config,$vendorDir, $repoName){
  38. $rootDir = dirname($vendorDir);
  39. if($repoName == ""){
  40. $repoDir = $rootDir; //最上层包所在目录
  41. }
  42. else{
  43. $repoDir = pathJoin($vendorDir,$repoName);//其他依赖包所在目录
  44. }
  45. //解析composer.json
  46. $cfgPath = pathJoin($repoDir,'composer.json');
  47. $data = json_decode(file_get_contents($cfgPath), true);
  48. $moduleName = $data["distribute-helper"]["module-name"];
  49. //获取安装目录
  50. $commonDir = pathJoin($rootDir,'common');
  51. $configDir = pathJoin($rootDir,'config',$moduleName);
  52. $moduleDir = pathJoin($rootDir,'module',$moduleName);
  53. //获取缓存目录
  54. $cacheDir = pathJoin($config['cache-dir'],$data["name"]);
  55. //返回包的相关信息
  56. return array(
  57. "repoName" => $data["name"],
  58. "repoDir" => $repoDir,
  59. "cacheDir" => $cacheDir,
  60. "ossHost" => $config['oss-host'],
  61. "moduleName" => $moduleName,
  62. "commonDir" => $commonDir,
  63. "configDir" => $configDir,
  64. "moduleDir" => $moduleDir,
  65. "helper" => $data["distribute-helper"],
  66. );
  67. }
  68. //下载包module文件
  69. private static function fetchModuleFiles($packageInfo){
  70. $cacheDir = $packageInfo['cacheDir'];
  71. $repoName = $packageInfo['repoName'];
  72. $moduleDir = $packageInfo['moduleDir'];
  73. $ossHost = $packageInfo['ossHost'];
  74. $moduleFiles = $packageInfo['helper']['module-files'];
  75. if(! $moduleFiles){
  76. logInfo($repoName,'no module files defined. skip.');
  77. return;
  78. }
  79. foreach($moduleFiles as $fileName){
  80. printf("[%s] fetching file -- %s\n",$repoName,$fileName);
  81. //下载文件到缓存区
  82. $filePath = downloadToDir($ossHost,$repoName,$fileName,$cacheDir);
  83. if(! $filePath ){
  84. printf("[%s] fetch file failed -- %s\n",$repoName,$fileName);
  85. continue;
  86. }
  87. // 解压文件
  88. if( isZipFile($fileName) ){
  89. if(! unzipFile($filePath,$moduleDir)) {
  90. printf("[%s] unzip file failed -- %s\n ",$repoName,$fileName);
  91. unlink($filePath);
  92. }
  93. }
  94. }
  95. }
  96. //下载包common文件
  97. private static function fetchCommonFiles($packageInfo){
  98. $cacheDir = $packageInfo['cacheDir'];
  99. $repoName = $packageInfo['repoName'];
  100. $commonDir = $packageInfo['commonDir'];
  101. $ossHost = $packageInfo['ossHost'];
  102. $commonFiles = $packageInfo['helper']['common-files'];
  103. if(! $commonFiles){
  104. logInfo($repoName,'no common files defined. skip.');
  105. return;
  106. }
  107. foreach($commonFiles as $fileName){
  108. printf("[%s] fetching common file -- %s\n",$repoName,$fileName);
  109. //下载文件到缓存区
  110. $filePath = downloadToDir($ossHost,$repoName,$fileName,$cacheDir);
  111. if(! $filePath ){
  112. printf("[%s] fetch common file failed -- %s\n",$repoName,$fileName);
  113. continue;
  114. }
  115. // 解压文件
  116. if( isZipFile($fileName) ){
  117. if(! unzipFile($filePath,$commonDir)) {
  118. printf("[%s] unzip common file failed -- %s\n ",$repoName,$fileName);
  119. unlink($filePath);
  120. }
  121. }
  122. }
  123. }
  124. //下载包config文件
  125. private static function fetchConfigFiles($packageInfo){
  126. $cacheDir = $packageInfo['cacheDir'];
  127. $repoName = $packageInfo['repoName'];
  128. $configDir = $packageInfo['configDir'];
  129. $ossHost = $packageInfo['ossHost'];
  130. $configFiles = $packageInfo['helper']['config-files'];
  131. if(! $configFiles){
  132. logInfo($repoName,'no config files defined. skip.');
  133. return;
  134. }
  135. foreach($configFiles as $fileName){
  136. printf("[%s] fetching config file -- %s\n",$repoName,$fileName);
  137. //下载文件到缓存区
  138. $filePath = downloadToDir($ossHost,$repoName,$fileName,$cacheDir);
  139. if(! $filePath ){
  140. printf("[%s] fetch config file failed -- %s\n",$repoName,$fileName);
  141. continue;
  142. }
  143. // 解压文件
  144. if( isZipFile($fileName) ){
  145. if(! unzipFile($filePath,$configDir)) {
  146. printf("[%s] unzip config file failed -- %s\n ",$repoName,$fileName);
  147. unlink($filePath);
  148. }
  149. }
  150. }
  151. }
  152. private static function registerPath($packageInfo){
  153. }
  154. private static function registerAutorun($packageInfo){
  155. }
  156. }