PageRenderTime 50ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 1ms

/lib/upload.class.php

https://github.com/alin40404/UCenter
PHP | 292 lines | 261 code | 25 blank | 6 comment | 37 complexity | 162284313c5cc62556e9364420c1a70a MD5 | raw file
  1. <?php
  2. /*
  3. [UCenter] (C)2001-2099 Comsenz Inc.
  4. This is NOT a freeware, use is subject to license terms
  5. $Id: upload.class.php 1059 2011-03-01 07:25:09Z monkey $
  6. */
  7. Class upload{
  8. var $dir;
  9. var $thumb_width;
  10. var $thumb_height;
  11. var $thumb_ext;
  12. var $watermark_file;
  13. var $watermark_pos;
  14. var $watermark_alpha;
  15. var $time;
  16. var $filetypedata = array();
  17. var $filetypeids = array();
  18. var $filetypes = array();
  19. function upload($time = 0) {
  20. $this->time = $time ? $time : time();
  21. $this->filetypedata = array(
  22. 'av' => array('av', 'wmv', 'wav'),
  23. 'real' => array('rm', 'rmvb'),
  24. 'binary' => array('dat'),
  25. 'flash' => array('swf'),
  26. 'html' => array('html', 'htm'),
  27. 'image' => array('gif', 'jpg', 'jpeg', 'png', 'bmp'),
  28. 'office' => array('doc', 'xls', 'ppt'),
  29. 'pdf' => array('pdf'),
  30. 'rar' => array('rar', 'zip'),
  31. 'text' => array('txt'),
  32. 'bt' => array('bt'),
  33. 'zip' => array('tar', 'rar', 'zip', 'gz'),
  34. );
  35. $this->filetypeids = array_keys($this->filetypedata);
  36. foreach($this->filetypedata as $data) {
  37. $this->filetypes = array_merge($this->filetypes, $data);
  38. }
  39. }
  40. function set_dir($dir) {
  41. $this->dir = $dir;
  42. }
  43. function set_thumb($width, $height, $ext = '') {
  44. $this->thumb_width = $width;
  45. $this->thumb_height = $height;
  46. $this->thumb_ext = $ext;
  47. }
  48. function set_watermark($file, $pos = 9, $alpha = 100) {
  49. $this->watermark_file = $file;
  50. $this->watermark_pos = $pos;
  51. $this->watermark_alpha = $alpha;
  52. }
  53. function execute() {
  54. $arr = array();
  55. $keys = array_keys($_FILES['attach']['name']);
  56. foreach($keys as $key) {
  57. if(!$_FILES['attach']['name'][$key]) {
  58. continue;
  59. }
  60. $file = array(
  61. 'name' => $_FILES['attach']['name'][$key],
  62. 'tmp_name' => $_FILES['attach']['tmp_name'][$key]
  63. );
  64. $fileext = $this->fileext($file['name']);
  65. if(!in_array($fileext, $this->filetypes)) {
  66. $fileext = '_'.$fileext;
  67. }
  68. $tfilename = $this->time.rand(100, 999);
  69. $filename = '1'.$tfilename.'.'.$fileext;
  70. $filethumb = '0'.$tfilename.'.'.($this->thumb_ext ? $this->thumb_ext : $fileext);
  71. $this->copy($file['tmp_name'], $this->dir.'/'.$filename);
  72. $arr[$key]['file'] = $filename;
  73. if(in_array($fileext, array('jpg', 'gif', 'png'))) {
  74. if($this->thumb_width) {
  75. if($this->thumb($this->thumb_width, $this->thumb_height, $this->dir.'/'.$filename, $this->dir.'/'.$filethumb, ($this->thumb_ext ? $this->thumb_ext : $fileext))) {
  76. $arr[$key]['thumb'] = $filethumb;
  77. }
  78. }
  79. if($this->watermark_file) {
  80. $this->waterfile($this->dir.'/'.$filename, $this->watermark_file, $fileext, $this->watermark_pos, $this->watermark_alpha);
  81. }
  82. }
  83. }
  84. return $arr;
  85. }
  86. function mkdir_by_date($date, $dir = '.') {
  87. list($y, $m, $d) = explode('-', date('Y-m-d', $date));
  88. !is_dir("$dir/$y") && mkdir("$dir/$y", 0777);
  89. !is_dir("$dir/$y/$m$d") && mkdir("$dir/$y/$m$d", 0777);
  90. return "$y/$m$d";
  91. }
  92. function mkdir_by_hash($s, $dir = '.') {
  93. $s = md5($s);
  94. !is_dir($dir.'/'.$s[0]) && mkdir($dir.'/'.$s[0], 0777);
  95. !is_dir($dir.'/'.$s[0].'/'.$s[1]) && mkdir($dir.'/'.$s[0].'/'.$s[1], 0777);
  96. !is_dir($dir.'/'.$s[0].'/'.$s[1].'/'.$s[2]) && mkdir($dir.'/'.$s[0].'/'.$s[1].'/'.$s[2], 0777);
  97. return $s[0].'/'.$s[1].'/'.$s[2];
  98. }
  99. function mkdir_by_uid($uid, $dir = '.') {
  100. $uid = sprintf("%09d", $uid);
  101. $dir1 = substr($uid, 0, 3);
  102. $dir2 = substr($uid, 3, 2);
  103. $dir3 = substr($uid, 5, 2);
  104. !is_dir($dir.'/'.$dir1) && mkdir($dir.'/'.$dir1, 0777);
  105. !is_dir($dir.'/'.$dir1.'/'.$dir2) && mkdir($dir.'/'.$dir1.'/'.$dir2, 0777);
  106. !is_dir($dir.'/'.$dir1.'/'.$dir2.'/'.$dir3) && mkdir($dir.'/'.$dir1.'/'.$dir2.'/'.$dir3, 0777);
  107. return $dir1.'/'.$dir2.'/'.$dir3;
  108. }
  109. function copy($sourcefile, $destfile) {
  110. move_uploaded_file($sourcefile, $destfile);
  111. @unlink($sourcefile);
  112. }
  113. function watermark($target, $watermark_file, $ext, $watermarkstatus=9, $watermarktrans=50) {
  114. $gdsurporttype = array();
  115. if(function_exists('imageAlphaBlending') && function_exists('getimagesize')) {
  116. if(function_exists('imageGIF')) $gdsurporttype[]='gif';
  117. if(function_exists('imagePNG')) $gdsurporttype[]='png';
  118. if(function_exists('imageJPEG')) {
  119. $gdsurporttype[]='jpg';
  120. $gdsurporttype[]='jpeg';
  121. }
  122. }
  123. if($gdsurporttype && in_array($ext, $gdsurporttype) ) {
  124. $attachinfo = getimagesize($target);
  125. $watermark_logo = imageCreateFromGIF($watermark_file);
  126. $logo_w = imageSX($watermark_logo);
  127. $logo_h = imageSY($watermark_logo);
  128. $img_w = $attachinfo[0];
  129. $img_h = $attachinfo[1];
  130. $wmwidth = $img_w - $logo_w;
  131. $wmheight = $img_h - $logo_h;
  132. $animatedgif = 0;
  133. if($attachinfo['mime'] == 'image/gif') {
  134. $fp = fopen($target, 'rb');
  135. $targetcontent = fread($fp, 9999999);
  136. fclose($fp);
  137. $animatedgif = strpos($targetcontent, 'NETSCAPE2.0') === FALSE ? 0 : 1;
  138. }
  139. if($watermark_logo && $wmwidth > 10 && $wmheight > 10 && !$animatedgif) {
  140. switch ($attachinfo['mime']) {
  141. case 'image/jpeg':
  142. $dst_photo = imageCreateFromJPEG($target);
  143. break;
  144. case 'image/gif':
  145. $dst_photo = imageCreateFromGIF($target);
  146. break;
  147. case 'image/png':
  148. $dst_photo = imageCreateFromPNG($target);
  149. break;
  150. }
  151. switch($watermarkstatus) {
  152. case 1:
  153. $x = +5;
  154. $y = +5;
  155. break;
  156. case 2:
  157. $x = ($logo_w + $img_w) / 2;
  158. $y = +5;
  159. break;
  160. case 3:
  161. $x = $img_w - $logo_w-5;
  162. $y = +5;
  163. break;
  164. case 4:
  165. $x = +5;
  166. $y = ($logo_h + $img_h) / 2;
  167. break;
  168. case 5:
  169. $x = ($logo_w + $img_w) / 2;
  170. $y = ($logo_h + $img_h) / 2;
  171. break;
  172. case 6:
  173. $x = $img_w - $logo_w;
  174. $y = ($logo_h + $img_h) / 2;
  175. break;
  176. case 7:
  177. $x = +5;
  178. $y = $img_h - $logo_h-5;
  179. break;
  180. case 8:
  181. $x = ($logo_w + $img_w) / 2;
  182. $y = $img_h - $logo_h;
  183. break;
  184. case 9:
  185. $x = $img_w - $logo_w-5;
  186. $y = $img_h - $logo_h-5;
  187. break;
  188. }
  189. imageAlphaBlending($watermark_logo, FALSE);
  190. imagesavealpha($watermark_logo,TRUE);
  191. imageCopyMerge($dst_photo, $watermark_logo, $x, $y, 0, 0, $logo_w, $logo_h, $watermarktrans);
  192. switch($attachinfo['mime']) {
  193. case 'image/jpeg':
  194. imageJPEG($dst_photo, $target);
  195. break;
  196. case 'image/gif':
  197. imageGIF($dst_photo, $target);
  198. break;
  199. case 'image/png':
  200. imagePNG($dst_photo, $target);
  201. break;
  202. }
  203. }
  204. }
  205. }
  206. function thumb($forcedwidth, $forcedheight, $sourcefile, $destfile, $destext, $imgcomp = 0) {
  207. $g_imgcomp=100-$imgcomp;
  208. $g_srcfile=$sourcefile;
  209. $g_dstfile=$destfile;
  210. $g_fw=$forcedwidth;
  211. $g_fh=$forcedheight;
  212. $ext = strtolower(substr(strrchr($sourcefile, '.'), 1, 10));
  213. if(file_exists($g_srcfile)) {
  214. $g_is = getimagesize($g_srcfile);
  215. if($g_is[0] < $forcedwidth && $g_is[1] < $forcedheight) {
  216. copy($sourcefile, $destfile);
  217. return filesize($destfile);;
  218. }
  219. if (($g_is[0] - $g_fw) >= ($g_is[1] - $g_fh)){
  220. $g_iw=$g_fw;
  221. $g_ih=($g_fw/$g_is[0])*$g_is[1];
  222. } else {
  223. $g_ih=$g_fh;
  224. $g_iw=($g_ih/$g_is[1])*$g_is[0];
  225. }
  226. switch ($ext) {
  227. case 'jpg':
  228. $img_src = @imagecreatefromjpeg($g_srcfile);
  229. !$img_src && $img_src = imagecreatefromgif($g_srcfile);
  230. break;
  231. case 'gif':
  232. $img_src = imagecreatefromgif($g_srcfile);
  233. break;
  234. case 'png':
  235. $img_src = imagecreatefrompng($g_srcfile);
  236. break;
  237. }
  238. $img_dst = imagecreatetruecolor($g_iw, $g_ih);
  239. imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $g_iw, $g_ih, $g_is[0], $g_is[1]);
  240. switch($destext) {
  241. case 'jpg':
  242. imagejpeg($img_dst, $g_dstfile, $g_imgcomp);
  243. break;
  244. case 'gif':
  245. imagegif($img_dst, $g_dstfile, $g_imgcomp);
  246. break;
  247. }
  248. imagedestroy($img_dst);
  249. return filesize($destfile);
  250. } else {
  251. return false;
  252. }
  253. }
  254. function fileext($filename) {
  255. return substr(strrchr($filename, '.'), 1, 10);
  256. }
  257. function get_filetype($ext) {
  258. foreach($this->filetypedata as $k => $v) {
  259. if(in_array($ext, $v)) {
  260. return $k;
  261. }
  262. }
  263. return 'common';
  264. }
  265. }
  266. ?>