实现多文件上传php类
多文件上传是PHP中的一个基础应用,反正PHPer都会遇到的问题,现在就介绍一个功能完善、强大的多文件上传类给大家吧,能用上这个类的地方会很多,代码如下:
- class Upload{
- var $saveName;// 保存名
- var $savePath;// 保存路径
- var $fileFormat = array('gif','jpg','doc','application/octet-stream');// 文件格式&MIME限定
- var $overwrite = 0;// 覆盖模式
- var $maxSize = 0;// 文件最大字节
- var $ext;// 文件扩展名
- var $thumb = 0;// 是否生成缩略图
- var $thumbWidth = 130;// 缩略图宽
- var $thumbHeight = 130;// 缩略图高
- var $thumbPrefix = "_thumb_";// 缩略图前缀
- var $errno;// 错误代号
- var $returnArray= array();// 所有文件的返回信息
- var $returninfo= array();// 每个文件返回信息
- // 构造函数
- // @param $savePath 文件保存路径
- // @param $fileFormat 文件格式限制数组
- // @param $maxSize 文件最大尺寸
- // @param $overwriet 是否覆盖 1 允许覆盖 0 禁止覆盖
- function Upload($savePath, $fileFormat='',$maxSize = 0, $overwrite = 0) {
- $this->setSavepath($savePath);
- $this->setFileformat($fileFormat);
- $this->setMaxsize($maxSize);
- $this->setOverwrite($overwrite);
- $this->setThumb($this->thumb, $this->thumbWidth,$this->thumbHeight);
- $this->errno = 0;
- }
- // 上传
- // @param $fileInput 网页Form(表单)中input的名称
- // @param $changeName 是否更改文件名
- function run($fileInput,$changeName = 1){
- if(isset($_FILES[$fileInput])){
- $fileArr = $_FILES[$fileInput];
- if(is_array($fileArr['name'])){//上传同文件域名称多个文件
- for($i = 0; $i < count($fileArr['name']); $i++){
- $ar['tmp_name'] = $fileArr['tmp_name'][$i];
- $ar['name'] = $fileArr['name'][$i];
- $ar['type'] = $fileArr['type'][$i];
- $ar['size'] = $fileArr['size'][$i];
- $ar['error'] = $fileArr['error'][$i];
- $this->getExt($ar['name']);//取得扩展名,赋给$this->ext,下次循环会更新
- $this->setSavename($changeName == 1 ? '' : $ar['name']);//设置保存文件名
- if($this->copyfile($ar)){
- $this->returnArray[] = $this->returninfo;
- }else{
- $this->returninfo['error'] = $this->errmsg();
- $this->returnArray[] = $this->returninfo;
- }
- }
- return $this->errno ? false : true;
- }else{//上传单个文件
- $this->getExt($fileArr['name']);//取得扩展名
- $this->setSavename($changeName == 1 ? '' : $fileArr['name']);//设置保存文件名
- if($this->copyfile($fileArr)){
- $this->returnArray[] = $this->returninfo;
- }else{
- $this->returninfo['error'] = $this->errmsg();
- $this->returnArray[] = $this->returninfo;
- }
- return $this->errno ? false : true;
- }
- return false;
- }else{
- $this->errno = 10;
- return false;
- }
- }
- // 单个文件上传
- // @param $fileArray 文件信息数组
- function copyfile($fileArray){
- $this->returninfo = array();
- // 返回信息
- $this->returninfo['name'] = $fileArray['name'];
- $this->returninfo['md5'] = @md5_file($fileArray['tmp_name']);
- $this->returninfo['saveName'] = $this->saveName;
- $this->returninfo['size'] = number_format( ($fileArray['size'])/1024 , 0, '.', ' ');//以KB为单位
- $this->returninfo['type'] = $fileArray['type'];
- // 检查文件格式
- if (!$this->validateFormat()){
- $this->errno = 11;
- return false;
- }
- // 检查目录是否可写
- if(!@is_writable($this->savePath)){
- $this->errno = 12;
- return false;
- }
- // 如果不允许覆盖,检查文件是否已经存在
- //if($this->overwrite == 0 && @file_exists($this->savePath.$fileArray['name'])){
- // $this->errno = 13;
- // return false;
- /