PHP file upload handling class

Last night of PHP's file upload side of things, got more than 3:00, and finally come up with the file upload handling class. Wrote a half last night, then the rest of the afternoon finish. Tested for a moment did not find any problems. Including the bulk upload file, add watermark to images, generate image thumbnails and other features, accessories directory can use the custom format the date parameters. First posted the code to share it:
PHP Code

   1. <? Php
   2. //-------------------------------------
   3. / / Document Description: file upload handling class
   4. / / File of: Jesse Lee
   5. / / On the home page: http://www.lisijie.com.cn
   6. / / Last Updated :2008-5-14
   7. //-------------------------------------
   8.
   9. Class upload (
  10.
  11. Var $ dir; / / accessories store physical directory
  12. Var $ time; / / custom file upload time
  13. Var $ allow_types; / / allow upload attachment type
  14. Var $ field; / / upload control name
  15. Var $ maxsize; / / maximum allowed file size in KB
  16.
  17. Var $ thumb_width; / / Thumbnail width
  18. Var $ thumb_height; / / the thumbnail height
  19.
  20. Var $ watermark_file; / / watermark image address
  21. Var $ watermark_pos; / / position of watermark
  22. Var $ watermark_trans; / / watermark transparency
  23.
  24.
  25. / / Constructor
  26. / / $ Types: allowed upload file types, $ maxsize: Allow size, $ field: From the control name, $ time: time for a custom upload
  27. Function upload ($ types = 'jpg | png', $ maxsize = 1024, $ field = 'attach', $ time ='') (
  28. $ This-> allow_types = explode ('|',$ types);
  29. $ This-> maxsize = $ maxsize * 1024;
  30. $ This-> field = $ field;
  31. $ This-> time = $ time? $ Time: time ();
  32.)
  33.
  34. / / Set and create a file stored in the directory specific
  35. / / $ Basedir: base directory must be the physical path
  36. / / $ Filedir: custom subdirectories, available parameters (y), (m), (d)
  37. Function set_dir ($ basedir, $ filedir ='') (
  38. $ Dir = $ basedir;
  39.! Is_dir ($ dir) & & @ mkdir ($ dir, 0777);
  40. If (! Empty ($ filedir)) (
  41. $ Filedir = str_replace (array ('(y }','{ m }','{ d)'), array (date ('Y', $ this-> time), date ('m', $ this-> time), date ('d', $ this-> time)), strtolower ($ filedir));
  42. $ Dirs = explode ('/',$ filedir);
  43. Foreach ($ dirs as $ d) (
  44.! Empty ($ d) & & $ dir .= $ d. '/';
  45.! Is_dir ($ dir) & & @ mkdir ($ dir, 0777);
  46.)
  47.)
  48. $ This-> dir = $ dir;
  49.)
  50.
  51. / / Image thumbnail settings, if you do not generate thumbnails is not set
  52. / / $ Width: thumbnail width, $ height: height Thumbnail
  53. Function set_thumb ($ width = 0, $ height = 0) (
  54. $ This-> thumb_width = $ width;
  55. $ This-> thumb_height = $ height;
  56.)
  57.
  58. / / Image watermark setting, if you do not add the watermark is not set to generate
  59. / / $ File: watermark image, $ pos: position of watermark, $ trans: watermark transparency
  60. Function set_watermark ($ file, $ pos = 6, $ trans = 80) (
  61. $ This-> watermark_file = $ file;
  62. $ This-> watermark_pos = $ pos;
  63. $ This-> watermark_trans = $ trans;
  64.)
  65.
  66. /*---------------------------------------------- ------------------
  67. The implementation of file upload, processed returns a success or failure of the file upload information array
  68. Including: name for the file name, upload is successfully uploaded to the server when the file name, upload failure is a local file name
  69. Dir for the server storing the physical path of the attachment, upload failure the value does not exist
  70. Size as the attachment size, upload the value does not exist fail
  71. Flag for the state identification, 1 for success, -1, said file type not allowed, said the file size exceeds -2
  72. ------------------------------------------------ -----------------*/
  73. Function execute () (
  74. $ Files = array (); / / successfully uploaded the file information
  75. $ Field = $ this-> field;
  76. $ Keys = array_keys ($ _FILES [$ field] ['name']);
  77. Foreach ($ keys as $ key) (
  78. If (! $ _FILES [$ Field] ['name'] [$ key]) continue;
  79.
  80. $ Fileext = $ this-> fileext ($ _FILES [$ field] ['name'] [$ key]); / / Get the file extension
  81. $ Filename = date ('Ymdhis', $ this-> time). Mt_rand (10,99 ).'.'.$ fileext; / / generate file name
  82. $ Filedir = $ this-> dir; / / Annex actual store directory
  83. $ Filesize = $ _FILES [$ field] ['size'] [$ key]; / / File Size
  84.
  85. / / File type not allowed
  86. If (! In_array ($ fileext, $ this-> allow_types)) (
  87. $ Files [$ key] ['name'] = $ _FILES [$ field] ['name'] [$ key];
  88. $ Files [$ key] ['flag'] = -1;
  89. Continue;
  90.)
  91.
  92. / / The file size exceeds
  93. If ($ filesize> $ this-> maxsize) (
  94. $ Files [$ key] ['name'] = $ _FILES [$ field] ['name'] [$ key];
  95. $ Files [$ key] ['name'] = $ filesize;
  96. $ Files [$ key] ['flag'] = -2;
  97. Continue;
  98.)
  99.
 100. $ Files [$ key] ['name'] = $ filename;
 101. $ Files [$ key] ['dir'] = $ filedir;
 102. $ Files [$ key] ['size'] = $ filesize;
 103.
 104. / / Save the uploaded file and delete temporary files
 105. If (is_uploaded_file ($ _FILES [$ field] ['tmp_name'] [$ key])) (
 106. Move_uploaded_file ($ _FILES [$ field] ['tmp_name'] [$ key], $ filedir. $ Filename);
 107. @ Unlink ($ _FILES [$ field] ['tmp_name'] [$ key]);
 108. $ Files [$ key] ['flag'] = 1;
 109.
 110. / / Add a watermark on pictures and generate thumbnails
 111. If (in_array ($ fileext, array ('jpg', 'png'))) (
 112. If ($ this-> thumb_width) (
 113. If ($ this-> create_thumb ($ filedir. $ Filename, $ filedir. 'Thumb_'. $ Filename)) (
 114. $ Files [$ key] ['thumb'] = 'thumb_'. $ Filename; / / thumbnail file name
 115.)
 116.)
 117. $ This-> create_watermark ($ filedir. $ Filename);
 118.)
 119.)
 120.)
 121.
 122. Return $ files;
 123.)
 124.
 125. / / Create thumbnails, generate the same extension Thumbnail
 126. / / $ Src_file: source image path, $ thumb_file: Thumbnail Path
 127. Function create_thumb ($ src_file, $ thumb_file) (
 128. $ T_width = $ this-> thumb_width;
 129. $ T_height = $ this-> thumb_height;
 130.
 131. If (! File_exists ($ src_file)) return false;
 132.
 133. $ Src_info = getImageSize ($ src_file);
 134.
 135. / / If the source image is less than or equal to the copy of the source image as a thumbnail thumbnail
 136. If ($ src_info [0] <= $ t_width & & $ src_info [1] <= $ t_height) (
 137. If (! Copy ($ src_file, $ thumb_file)) (
 138. Return false;
 139.)
 140. Return true;
 141.)
 142.
 143. / / Thumbnail size pro-rata basis
 144. If ($ src_info [0] - $ t_width> $ src_info [1] - $ t_height) (
 145. $ T_height = ($ t_width / $ src_info [0]) * $ src_info [1];
 146.) Else (
 147. $ T_width = ($ t_height / $ src_info [1]) * $ src_info [0];
 148.)
 149.
 150. / / Get file extension
 151. $ Fileext = $ this-> fileext ($ src_file);
 152.
 153. Switch ($ fileext) (
 154. Case 'jpg':
 155. $ Src_img = ImageCreateFromJPEG ($ src_file); break;
 156. Case 'png':
 157. $ Src_img = ImageCreateFromPNG ($ src_file); break;
 158. Case 'gif':
 159. $ Src_img = ImageCreateFromGIF ($ src_file); break;
 160.)
 161.
 162. / / Create a true color of the thumbnail image
 163. $ Thumb_img = @ ImageCreateTrueColor ($ t_width, $ t_height);
 164.
 165. / / ImageCopyResampled copy of the image smoothness function better, giving priority to
 166. If (function_exists ('imagecopyresampled')) (
 167. @ ImageCopyResampled ($ thumb_img, $ src_img, 0,0,0,0, $ t_width, $ t_height, $ src_info [0], $ src_info [1]);
 168.) Else (
 169. @ ImageCopyResized ($ thumb_img, $ src_img, 0,0,0,0, $ t_width, $ t_height, $ src_info [0], $ src_info [1]);
 170.)
 171.
 172. / / Generate thumbnail
 173. Switch ($ fileext) (
 174. Case 'jpg':
 175. ImageJPEG ($ thumb_img, $ thumb_file); break;
 176. Case 'gif':
 177. ImageGIF ($ thumb_img, $ thumb_file); break;
 178. Case 'png':
 179. ImagePNG ($ thumb_img, $ thumb_file); break;
 180.)
 181.
 182. / / Destroy the temporary image
 183. @ ImageDestroy ($ src_img);
 184. @ ImageDestroy ($ thumb_img);
 185.
 186. Return true;
 187.
 188.)
 189.
 190. / / Add a watermark to images
 191. / / $ File: the file you want to add watermark
 192. Function create_watermark ($ file) (
 193.
 194. / / File does not exist is returned
 195. If (! File_exists ($ this-> watermark_file) | |! File_exists ($ file)) return;
 196. If (! Function_exists ('getImageSize')) return;
 197.
 198. / / Check GD supported file types
 199. $ Gd_allow_types = array ();
 200. If (function_exists ('ImageCreateFromGIF')) $ gd_allow_types ['image / gif'] = 'ImageCreateFromGIF';
 201. If (function_exists ('ImageCreateFromPNG')) $ gd_allow_types ['image / png'] = 'ImageCreateFromPNG';
 202. If (function_exists ('ImageCreateFromJPEG')) $ gd_allow_types ['image / jpeg'] = 'ImageCreateFromJPEG';
 203.
 204. / / Get file information
 205. $ Fileinfo = getImageSize ($ file);
 206. $ Wminfo = getImageSize ($ this-> watermark_file);
 207.
 208. If ($ fileinfo [0] <$ wminfo [0] | | $ fileinfo [1] <$ wminfo [1]) return;
 209.
 210. If (array_key_exists ($ fileinfo ['mime'], $ gd_allow_types)) (
 211. If (array_key_exists ($ wminfo ['mime'], $ gd_allow_types)) (
 212.
 213. / / Create the image from the file
 214. $ Temp = $ gd_allow_types [$ fileinfo ['mime']]($ file);
 215. $ Temp_wm = $ gd_allow_types [$ wminfo ['mime']]($ this-> watermark_file);
 216.
 217. / / Position of watermark
 218. Switch ($ this-> watermark_pos) (
 219. Case 1: / / at the top of the left hand side
 220. $ Dst_x = 0; $ dst_y = 0; break;
 221. Case 2: / / top center
 222. $ Dst_x = ($ fileinfo [0] - $ wminfo [0]) / 2; $ dst_y = 0; break;
 223. Case 3: / / top right hand side
 224. $ Dst_x = $ fileinfo [0]; $ dst_y = 0; break;
 225. Case 4: / / bottom left hand side
 226. $ Dst_x = 0; $ dst_y = $ fileinfo [1]; break;
 227. Case 5: / / bottom of the center
 228. $ Dst_x = ($ fileinfo [0] - $ wminfo [0]) / 2; $ dst_y = $ fileinfo [1]; break;
 229. Case 6: / / bottom right hand side
 230. $ Dst_x = $ fileinfo [0] - $ wminfo [0]; $ dst_y = $ fileinfo [1] - $ wminfo [1]; break;
 231. Default: / / Random
 232. $ Dst_x = mt_rand (0, $ fileinfo [0] - $ wminfo [0]); $ dst_y = mt_rand (0, $ fileinfo [1] - $ wminfo [1]);
 233.)
 234.
 235. If (function_exists ('ImageAlphaBlending')) ImageAlphaBlending ($ temp_wm, True); / / set the blending mode of the image
 236. If (function_exists ('ImageSaveAlpha')) ImageSaveAlpha ($ temp_wm, True); / / save the full alpha channel information
 237.
 238. / / Add a watermark to images
 239. If (function_exists ('imageCopyMerge')) (
 240. ImageCopyMerge ($ temp, $ temp_wm, $ dst_x, $ dst_y, 0,0, $ wminfo [0], $ wminfo [1], $ this-> watermark_trans);
 241.) Else (
 242. ImageCopyMerge ($ temp, $ temp_wm, $ dst_x, $ dst_y, 0,0, $ wminfo [0], $ wminfo [1]);
 243.)
 244.
 245. / / Save the image
 246. Switch ($ fileinfo ['mime']) (
 247. Case 'image / jpeg':
 248. @ ImageJPEG ($ temp, $ file);
 249. Break;
 250. Case 'image / png':
 251. @ ImagePNG ($ temp, $ file);
 252. Break;
 253. Case 'image / gif':
 254. @ ImageGIF ($ temp, $ file);
 255. Break;
 256.)
 257. / / Destroy the image zero
 258. @ ImageDestroy ($ temp);
 259. @ ImageDestroy ($ temp_wm);
 260.)
 261.)
 262.)
 263.
 264. / / Get the file extension
 265. Function fileext ($ filename) (
 266. Return strtolower (substr (strrchr ($ filename ,'.'), 1,10));
 267.)
 268.)
 269.?>

Use examples:
PHP Code

   1. <? Php
   2. If ($ _GET ['action'] == 'save') (
   3.
   4. $ Up = new upload ();
   5. $ Up-> set_dir (dirname (__FILE__). '/ Upload /','{ y) / (m)');
   6. $ Up-> set_thumb (100,80);
   7. $ Up-> set_watermark (dirname (__FILE__). '/ Jblog / images / watermark.png', 6,90);
   8. $ Fs = $ up-> execute ();
   9.
  10. Var_dump ($ fs);
  11.)
  12.?>
  13. <html>
  14. <head> <title> Test </ title> </ head>
  15. <body Style="margin:0;padding:0">
  16. <form Name="upload" method="post" action="?action=save" enctype="multipart/form-data" style="margin:0">
  17. <input Type="file" name="attach[]" />
  18. <input Type="file" name="attach[]" />
  19. <input Type="submit" name="submit" value="上传" />
  20. </ Form>
  21. </ Body>
  22. </ Html>

Declined comment