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>