Attachment.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: liuyifan
  5. * Date: 2019/3/21
  6. * Time: 16:44
  7. */
  8. namespace app\platform\modules\system\models;
  9. use app\common\models\BaseModel;
  10. use app\common\services\qcloud\Conf;
  11. class Attachment extends BaseModel
  12. {
  13. /**
  14. * 保存全局设置的数据
  15. *
  16. * @param $set_data
  17. * @param $post_max_size
  18. * @return array
  19. */
  20. public static function saveGlobal($set_data, $post_max_size)
  21. {
  22. $set_data['thumb_width'] = intval(trim($set_data['thumb_width']));
  23. if ($set_data['thumb'] && !$set_data['thumb_width']) {
  24. return ['msg' => '请设置图片缩略宽度'];
  25. }
  26. $set_data['image_extentions'] = self::check_ext($set_data['image_extentions']);
  27. if (!$set_data['image_extentions']['0']) {
  28. return ['msg' => '请添加支持的图片附件后缀类型'];
  29. }
  30. $set_data['image_limit'] = max(0, min(intval(trim($set_data['image_limit'])), $post_max_size));
  31. $zip_percentage = intval($set_data['zip_percentage']);
  32. if ($zip_percentage <= 0 || $zip_percentage > 100) {
  33. $set_data['image']['zip_percentage'] = 100;
  34. }
  35. $set_data['audio_extentions'] = self::check_ext($set_data['audio_extentions']);
  36. if (!$set_data['audio_extentions']['0']) {
  37. return ['msg' => '请添加支持的音频视频附件后缀类型'];
  38. }
  39. $set_data['audio_limit'] = max(0, min(intval(trim($set_data['audio_limit'])), $post_max_size));
  40. return SystemSetting::settingSave($set_data, 'global', 'system_global') ? ['result' => 1] : ['msg' => '失败'];
  41. }
  42. /**
  43. * 检测后缀名是否合适
  44. *
  45. * @param $extentions
  46. * @return array
  47. */
  48. public static function check_ext($extentions)
  49. {
  50. $harmtype = array('asp', 'php', 'jsp', 'js', 'css', 'php3', 'php4', 'php5', 'ashx', 'aspx', 'exe', 'cgi');
  51. $extentions = explode("\n", $extentions);
  52. foreach ($extentions as $key => &$row) {
  53. $row = trim($row);
  54. if (in_array($row, $harmtype)) {
  55. unset($extentions[$key]);
  56. continue;
  57. }
  58. }
  59. return $extentions;
  60. }
  61. /**
  62. * 保存远程设置的数据
  63. *
  64. * @param $alioss
  65. * @param $cos
  66. * @param $remote
  67. * @return array
  68. */
  69. public static function saveRemote($alioss, $cos, $obs, $remote)
  70. {
  71. switch($cos['local']) {
  72. case '南京':
  73. $cos['local'] = 'ap-nanjing';
  74. break;
  75. case '成都':
  76. $cos['local'] = 'ap-chengdu';
  77. break;
  78. case '北京':
  79. $cos['local'] = 'ap-beijing';
  80. break;
  81. case '广州':
  82. $cos['local'] = 'ap-guangzhou';
  83. break;
  84. case '上海':
  85. $cos['local'] = 'ap-shanghai';
  86. break;
  87. case '重庆':
  88. $cos['local'] = 'ap-chongqing';
  89. break;
  90. case '北京金融':
  91. $cos['local'] = 'ap-beijing-fsi';
  92. break;
  93. case '上海金融':
  94. $cos['local'] = 'ap-shanghai-fsi';
  95. break;
  96. case '深圳金融':
  97. $cos['local'] = 'ap-shenzhen-fsi';
  98. break;
  99. case '香港':
  100. $cos['local'] = 'ap-hongkong';
  101. break;
  102. }
  103. $remotes = array(
  104. 'type' => intval(request()->type),
  105. 'alioss' => array(
  106. 'key' => $alioss['key'],
  107. 'secret' => !(strpos($alioss['secret'], '*') === FALSE) ? $remote['alioss']['secret'] : $alioss['secret'],
  108. 'bucket' => $alioss['bucket'],
  109. 'loca_name' => $alioss['loca_name'],
  110. 'internal' => $alioss['internal']
  111. ),
  112. 'cos' => array(
  113. 'appid' => trim($cos['appid']),
  114. 'secretid' => trim($cos['secretid']),
  115. 'secretkey' => !(strpos(trim($cos['secretkey']), '*') === FALSE) ? $remote['cos']['secretkey'] : trim($cos['secretkey']),
  116. 'bucket' => trim($cos['bucket']),
  117. 'local' => trim($cos['local']),
  118. 'url' => trim($cos['url'])
  119. ),
  120. 'obs' => array(
  121. 'key' => trim($obs['key']),
  122. 'secret' => !(strpos(trim($obs['secret']), '*') === FALSE) ? $remote['obs']['secret'] : trim($obs['secret']),
  123. 'endpoint' => trim($obs['endpoint']),
  124. 'bucket' => trim($obs['bucket']),
  125. 'url' => trim($obs['url'])
  126. )
  127. );
  128. if ($remotes['type'] == '2') {
  129. $buckets = attachment_alioss_buctkets($remotes['alioss']['key'], $remotes['alioss']['secret']);
  130. if (is_error($buckets)) {
  131. return ['msg' => $buckets['message']];
  132. }
  133. list($remotes['alioss']['bucket'], $remotes['alioss']['url']) = explode('@@', $alioss['bucket']);
  134. if (!$buckets[$remotes['alioss']['bucket']]) {
  135. return ['msg' => $buckets['Bucket不存在或是已经被删除']];
  136. }
  137. $remotes['alioss']['url'] = 'http://' . $remotes['alioss']['bucket'] . '.' . $buckets[$remotes['alioss']['bucket']]['location'] . '.aliyuncs.com';
  138. $remotes['alioss']['ossurl'] = $buckets[$remotes['alioss']['bucket']]['location'] . '.aliyuncs.com';
  139. if ($alioss['url']) {
  140. $url = trim($alioss['url'], '/');
  141. if (!strexists($url, 'http://') && !strexists($url, 'https://')) {
  142. $url = 'http://' . $url;
  143. }
  144. $remotes['alioss']['url'] = $url;
  145. }
  146. $remotes['alioss']['bucket'] = $alioss['bucket'];
  147. } elseif ($remotes['type'] == '4') {
  148. $remotes['cos']['bucket'] = str_replace("-{$remotes['cos']['appid']}", '', trim($remotes['cos']['bucket']));
  149. if (!$remotes['cos']['url']) {
  150. $remotes['cos']['url'] = sprintf('https://%s-%s.cos.%s.myqcloud.com', $remotes['cos']['bucket'], $remotes['cos']['appid'], $remotes['cos']['local']);
  151. }
  152. $remotes['cos']['url'] = rtrim($remotes['cos']['url'], '/');
  153. Conf::$appid = $remotes['cos']['appid'];
  154. Conf::$secretid = $remotes['cos']['secretid'];
  155. Conf::$tsecretkey = $remotes['cos']['secretkey'];
  156. $auth = attachment_cos_auth($remotes['cos']['bucket'], $remotes['cos']['appid'], $remotes['cos']['secretid'], $remotes['cos']['secretkey'], $remotes['cos']['local']);
  157. if (is_error($auth)) {
  158. return ['msg' => $auth['message']];
  159. }
  160. } elseif ($remotes['type'] == '5') {
  161. $remotes['obs']['bucket'] = trim($remotes['obs']['bucket']);
  162. if (!$remotes['obs']['url']) {
  163. $remotes['obs']['url'] = sprintf('https://%s.%s', $remotes['obs']['bucket'], $remotes['obs']['endpoint']);
  164. }
  165. $remotes['obs']['url'] = rtrim($remotes['obs']['url'], '/');
  166. $auth = attachment_obs_auth($remotes['obs']['key'], $remotes['obs']['secret'], $remotes['obs']['endpoint'], $remotes['obs']['bucket']);
  167. if (is_error($auth)) {
  168. return ['msg' => $auth['message']];
  169. }
  170. }
  171. return SystemSetting::settingSave($remotes, 'remote', 'system_remote') ? ['result' => 1] : ['msg' => '失败'];
  172. }
  173. }