<?php /** * FileUplaod class * 部分代码源自网络 * 2010-3-23 */ class FileUpload { // 验证上传文件是否为规定大小 private static function size($_formName = 'UploadFile', $size = '10M') { $files = self::dealFiles($_FILES[$_formName]); $return = TRUE; foreach($files as $file){ if ((int) $file['error'] !== UPLOAD_ERR_OK){ return TRUE; } $size = strtoupper($size); if ( ! preg_match('/[0-9]++[BKMG]/', $size)){ return FALSE; } switch (substr($size, -1)){ case 'G': $size = intval($size) * pow(1024, 3); break; case 'M': $size = intval($size) * pow(1024, 2); break; case 'K': $size = intval($size) * pow(1024, 1); break; default: $size = intval($size); break; } $return = ($return and ($file['size'] <= $size)); } return $return; } /** * 验证上传文件后缀 默认为图片类型 * _formName string default UploadFile 表单元素name值 * allowExt array|string 允许的后缀类型 可以为数组或者字符串 * return bool 是否验证成功 */ public static function valid($_formName = 'UploadFile', $_allowExt = array('jpeg','gif','png','jpg','bmp'), $size = '10M') { if(! self::size($_formName,$size)){ return false; } $return = TRUE; if(is_array($_FILES[$_formName]['name'])){ foreach($_FILES[$_formName]['name'] as $_name){ $_ext = pathinfo($_name,PATHINFO_EXTENSION); $return = ($return AND in_array($_ext, $_allowExt)); } return $return; }else{ $_ext = pathinfo($_FILE[$_formName],PATHINFO_EXTENSION); if(in_array($_ext, $_allowExt)){ return TRUE; } return FALSE; } return FALSE; } /** * 保存上传文件 * _formName string default UploadFile 表单元素name值 * _savePath string default NULL 文件保存路径(默认当前路径./upload/目录) * _fileName string default NULL 文件保存名称 默认时间戳+原文件名 * _chmode int default 0664 上传后的文件权限 */ public static function save($_formName = 'UploadFile', $_savePath = NULL, $_fileName = NULL, $_chmode = 0664) { $file = ''; $files = array(); if(is_array($_FILES[$_formName]['name'])){ $_fileName = ''; $files = self::dealFiles($_FILES[$_formName]); $fileNames = array(); foreach($files as $file){ $fileNames[] = self::upload($file,$_savePath,$_fileName, $_chmode); } return $fileNames; }else{ $file = $_FILES[$_formName]; $fileName = self::upload($file,$_savePath,$_fileName, $_chmode); } return $fileName; } /** * 保存上传文件 * 参数同save() */ private static function upload($file = array(), $_savePath = NULL, $_fileName = NULL, $_chmode = 0664) { if(empty($file)){ return FALSE;} if($_fileName == NULL){ $_fileName = time().rand(1,100).$file['name']; } $_fileName = preg_replace('//s+/', '_', $_fileName); if ($_savePath == NULL){ $_savePath = './upload/'; } self::mkdirs($_savePath,0777); $_savePath = rtrim($_savePath, '/').'/'; if ( ! is_writable($_savePath)){ throw new Exception('The directory '.$_savePath.' is not_writable !'); } if (is_uploaded_file($file['tmp_name']) AND move_uploaded_file($file['tmp_name'], $filename = $_savePath.$_fileName)){ if ($chmod !== FALSE){ chmod($filename, $_chmod); } return $filename; }else{ throw new Exception('Move uploaded File Error!'.$file['tmp_name']); } return FALSE; } // 创建目录树 public static function mkdirs($dir, $mode = 0777) { if (!is_dir($dir)) { self::mkdirs(dirname($dir), $mode); return mkdir($dir, $mode); } return TRUE; } // 多文件上传 数组格式转换 private static function dealFiles(&$files) { $fileArray = array(); $count = count($files['name']); $keys = array_keys($files); for ($i=0; $i<$count; $i++) { foreach ($keys as $key) { if(empty($files[$key][$i])){ unset($fileArray[$i][$key]); unset($fileArray[$i]['error']); }else{ $fileArray[$i][$key] = $files[$key][$i]; } } } // 剔除为空的元素 foreach($fileArray as $key=>$value){ if(empty($value)){ unset($fileArray[$key]); } } return $fileArray; } } // 测试 if( !empty($_FILES['UploadFile'])){ $allowExt = array('jpg'); if(FileUpload::valid('UploadFile', $allowExt)){ $test = FileUpload::save('UploadFile'); print_r($test); }else{ echo 'error'; } } ?> <form action="#" method="post" enctype="multipart/form-data"> <input type="file" name="UploadFile[]"><br/> <input type="file" name="UploadFile[]"><br/> <input type="file" name="UploadFile[]"><br/> <input type="file" name="UploadFile[]"><br/> <input type="submit" value="sub"> </form>