Code:/*** @author [Lee] <[<[email protected]>]>* 1, automatically verify whether the file is a form submitted by a file or a file submitted by a base64 stream * 2, verify that the picture type is legal * 3, Verify that the picture size is legal * 4, verify that the picture size is legal * 5, Support zoom function * 6, support cropping function * 7, support thumbnail function */class fileuploader{private $file;p rivate $type;p ublic $suffix = Array ();p ublic $measure = Array ();p ublic $size = Array ();p ublic $scale = Array (' Is_scale ' =>0, ' ratio ' = >1);p ublic $crop = Array (' Is_crop ' =>0, ' width ' =>0, ' height ' =>0);p ublic $thumb = Array (' Is_thumb ' =>0, ' width ' =>0, ' height ' =>0);p ublic function __construct ($file) {$t His->file = $file; $this->gettype ();} /* Internal method: Get Picture Type 1, multiple file 2, single file 3, Base64 stream file */private function GetType () {$file = $this->file; if (Is_array ($file)) {//Multiple file if (Is_array ($file [' name '])) {$type = 1; }else{//Single File $type = 2; }}else{$type = 3; } $this->type = $type;} /* Internal method: Get the picture suffix @param path picture @return suffix suffix name: JPG */private function Getsuffix ($path) {$file = fopen ($path, "RB"); $bin = Fread ($file, 2); Read-only 2-byte fclose ($file); $strInfo = @unpack ("C2chars", $bin); $typeCode = Intval ($strInfo [' chars1 ']. $strInfo [' chars2 ']); $suffix = "Unknow"; if ($typeCode = = 255216) {$suffix = "jpg"; }elseif ($typeCode = = 7173) {$suffix = "gif"; }elseif ($typeCode = = 13780) {$suffix = "png"; }elseif ($typeCode = = 6677) {$suffix = "bmp"; }elseif ($typeCode = = 7798) {$suffix = "EXE"; }elseif ($typeCode = = 7784) {$suffix = "midi"; }elseif ($typeCode = = 8297) {$suffix = "rar"; }elseif ($typeCode = = 7368) {$suffix = "MP3"; }elseif ($typeCode = = 0) {$suffix = "mp4"; }elseif ($typeCode = = 8273) {$suffix = "wav"; } return $suffix;} /* Internal method: Save stream file @param stream file stream @param suffix suffix @param dir save folder @return Path file */private function uploadBase64 ($strea M, $suffix, $dir) {if (empty ($stream)) return false; if (Preg_match ('/^ data: (\s)? ( IMAGE|IMG) \ (\w+), base64,)/', $stream, $str)) {$path = $dir. MD5 (rand (100000, 999999)). ". {$suffix} "; if (File_put_contents ($path, Base64_decode (Str_replace ($str [1], ", $stream))) {return $path; } else {return false; }} else {return false; }}/* Check whether the file type is legal @return RET true: Valid false: illegal */public function Checktype () {$file = $this->file; $type = $this->type; $validSuffix = $this->suffix; $ret = true; if ($type ==1) {//multi-file foreach ($file [' Tmp_name '] as $v) {$suffix = $this->getsuffix ($v); if (!in_array ($suffix, $validSuffix)) {$ret = false; Break }}}elseif ($type ==2) {//single file $suffix = $this->getsuffix ($file [' tmp_name ']); if (!in_array ($suffix, $validSuffix)) {$ret = false; }}else{//base64 file $suffix = $this->getsuffix ($file);if (!in_array ($suffix, $validSuffix)) {$ret = false; }} return $ret;} /* Verify file size is legal @return ret true: Valid false: illegal */public function checkmeasure () {$file = $this->file; $type = $this->type; $validMeasure = $this->measure; $ret = true; if ($type ==1) {//multi-file foreach ($file [' Tmp_name '] as $v) {$measure = getimagesize ($v); $width = $measure [0]; $height = $measure [1]; if ($width < $validMeasure [' width '][0] | | $width > $validMeasure [' Width '][1]) | | ($height < $validMeasure [' height '][0] | | $height > $validMeasure [' Height '][1]) {$ret = false; Break }}}elseif ($type ==2) {//single file $measure = getimagesize ($file [' tmp_name ']); $width = $measure [0]; $height = $measure [1]; if ($width < $validMeasure [' width '][0] | | $width > $validMeasure [' Width '][1]) | | ($height < $validMeasure [' height '][0] | | $height >$validMeasure [' height '][1]) {$ret = false; }}else{//base64 file $measure = getimagesize ($file); $width = $measure [0]; $height = $measure [1]; if ($width < $validMeasure [' width '][0] | | $width > $validMeasure [' Width '][1]) | | ($height < $validMeasure [' height '][0] | | $height > $validMeasure [' Height '][1]) {$ret = false; }} return $ret;} /* Verify file size is legal @return ret true: Valid false: illegal */public function checksize () {$file = $this->file; $type = $this->type; $validSize = $this->size; $ret = true; if ($type ==1) {//multi-file foreach ($file [' Tmp_name '] as $v) {$size = FileSize ($v); if ($size < $validSize [' min ']*1024*1024) | | ($size > $validSize [' Max ']*1024*1024)] {$ret = false; Break }}}elseif ($type ==2) {//single file $size = FileSize ($file [' tmp_name ']); if ($size < $validSize [' min ']*1024*1024) | | ($size > $validSize [' Max ']*1024*1024)} {$ret = false; }}else{//base64 file $size = filesize ($file); if ($size < $validSize [' min ']*1024*1024) | | ($size > $validSize [' Max ']*1024*1024)] {$ret = false; }} return $ret;} /* Internal method: Zoom picture */private function Scale ($path, $suffix, $ratio) {list ($width, $height) = getimagesize ($path); $new _w = $ratio * $width; $new _h = $ratio * $height; $new _s = Imagecreatetruecolor ($new _w, $new _h); if (In_array ($suffix, array (' jpg ', ' jpeg '))) {$img = Imagecreatefromjpeg ($path); }elseif ($suffix = = ' png ') {$img = Imagecreatefrompng ($path); }elseif ($suffix = = ' gif ') {$img = Imagecreatefromgif ($path); }else{return false; } $ret 1 = imagecopyresized ($new _s, $img, 0, 0, 0, 0, $new _w, $new _h, $width, $height); if (In_array ($suffix, array (' jpg ', ' jpeg '))) {$ret 2 = imagejpeg ($new _s, $path); }elseif ($suffix = = ' png ') {$ret 2 = imagepng ($new _s, $path); }elseif ($suffix = = ' gif ') {$ret 2 = imagegif ($new _s, $path); }else{return false; } Imagedestroy ($new _s); Imagedestroy ($IMG); if ($ret 1 && $ret 2) {return $path; }else{return false; }}/* Internal method: Crop picture */private function crop ($path, $suffix, $cut _width, $cut _height) {$cut _x; $cut _y; $min; $size = getimagesize ($path); $width = $size [0]; $height = $size [1]; $min = min ($width, $height); $cut _width = ($cut _width > $min) $min: $cut _width; $cut _height = ($cut _height > $min) $min: $cut _height; $cut _x = ($width-$cut _width)/2; $cut _y = ($height-$cut _height)/2; if (In_array ($suffix, array (' jpg ', ' jpeg '))) {$img = Imagecreatefromjpeg ($path); }elseif ($suffix = = ' png ') {$img = Imagecreatefrompng ($path); }elseif ($suffix = = ' gif ') {$img = Imagecreatefromgif ($path); }else{return false; } $new _s = Imagecreatetruecolor ($cut _width, $cut _height); $rEt1 = imagecopyresampled ($new _s, $img, 0, 0, $cut _x, $cut _y, $cut _width, $cut _height, $cut _width, $cut _height); if (In_array ($suffix, array (' jpg ', ' jpeg '))) {$ret 2 = imagejpeg ($new _s, $path); }elseif ($suffix = = ' png ') {$ret 2 = imagepng ($new _s, $path); }elseif ($suffix = = ' gif ') {$ret 2 = imagegif ($new _s, $path); }else{return false; } Imagedestroy ($new _s); Imagedestroy ($IMG); if ($ret 1 && $ret 2) {return $path; }else{return false; }}/* internal methods: Generate thumbnails */private function thumb ($path, $suffix, $cut _width, $cut _height) {$cut _x; $cut _y; $ratio = 1; $size = getimagesize ($path); $width = $size [0]; $height = $size [1]; $CW; $ch; if ($width/$height >= $cut _width/$cut _height) {$ratio = $cut _height/$height; }else{$ratio = $cut _width/$width; } $path = $this->scale ($path, $suffix, $ratio, $path); $width *= $ratio; $height *= $ratio; $cut _x = ABS ($cut _width-$width)/2; $cut _y = ABS ($cut _height-$height)/2; if (In_array ($suffix, array (' jpg ', ' jpeg '))) {$img = Imagecreatefromjpeg ($path); }elseif ($suffix = = ' png ') {$img = Imagecreatefrompng ($path); }elseif ($suffix = = ' gif ') {$img = Imagecreatefromgif ($path); }else{return false; } $new _s = Imagecreatetruecolor ($cut _width, $cut _height); $ret 1 = imagecopyresampled ($new _s, $img, 0, 0, $cut _x, $cut _y, $cut _width, $cut _height, $cut _width, $cut _height); if (In_array ($suffix, array (' jpg ', ' jpeg '))) {$ret 2 = imagejpeg ($new _s, $path); }elseif ($suffix = = ' png ') {$ret 2 = imagepng ($new _s, $path); }elseif ($suffix = = ' gif ') {$ret 2 = imagegif ($new _s, $path); }else{return false; } Imagedestroy ($new _s); Imagedestroy ($IMG); if ($ret 1 && $ret 2) {return $path; }else{return false; }}/* Save @param dir stored folder such as: './' @return RET store file path such as: './test.jpg ' */public function Save ($dir) {$file = $this->file; $type = $this->type; $scale = $this->scale; $crop = $this->crop; $thumb = $this->thumb; $is _scale = $scale [' Is_scale ']; $is _crop = $crop [' Is_crop ']; $is _thumb = $thumb [' Is_thumb ']; $ratio = $scale [' ratio ']; $crop _width = $crop [' width ']; $crop _height = $crop [' height ']; $thumb _width = $thumb [' width ']; $thumb _height = $thumb [' height ']; if ($type ==1) {//multi-file foreach ($file [' Tmp_name '] as $k = + $v) {$suffix = $this->getsuffix ($v); $name = $dir. MD5 (rand (100000,999999)). $suffix; $flag = File_put_contents ($name, file_get_contents ($v)); if (! $flag) {$ret = false; }else{if ($is _scale) {$name = $this->scale ($name, $suffix, $ratio); if ($is _crop) {$name = $this->crop ($name, $suffix, $crop _width, $crop _height); } if ($is _thumb) { $name = $this->thumb ($name, $suffix, $thumb _width, $thumb _height); } $ret [$k] = $name; }}}elseif ($type ==2) {//single file $suffix = $this->getsuffix ($file [' tmp_name ']); $name = $dir. MD5 (rand (100000,999999)). $suffix; $flag = File_put_contents ($name, file_get_contents ($file [' tmp_name ']); if (! $flag) {$ret = false; }else{if ($is _scale) {$name = $this->scale ($name, $suffix, $ratio); if ($is _crop) {$name = $this->crop ($name, $suffix, $crop _width, $crop _height); if ($is _thumb) {$name = $this->thumb ($name, $suffix, $thumb _width, $thumb _height); } $ret = $name; }}else{//base64 file $suffix = $this->getsuffix ($file); $name = $dir. MD5 (rand (100000,999999)). $suffix; $flag = File_put_contents ($name, file_get_contents ($file));if (! $flag) {$ret = false; }else{if ($is _scale) {$name = $this->scale ($name, $suffix, $ratio); if ($is _crop) {$name = $this->crop ($name, $suffix, $crop _width, $crop _height); if ($is _thumb) {$name = $this->thumb ($name, $suffix, $thumb _width, $thumb _height); } $ret = $name; }} return $ret;}}