<?php
/**
*说明: 批量文件上传
*version 2.0
*@author sanshi(叁石)
*QQ: 35047205
*MSN: sanshi0815@tom.com
*Create 2007/5/11
**/
include_once(dirname(__FILE__)."/FileIO.class.php");
class Upload{
//设置文件上传的最大量
var $uploadFileFize = 100;
var $tempFileName = array();
var $uploadFileName = array();
function Upload()
{
$this->uploadFileFize = $this->uploadFileFize*1024;
}
function init($fileField,$fileType='img')
{
//同意上传的类型
$allowFile['img'] = array('jpg','bmp','jpeg');
$allowFile['file'] = array('rar','zip');
//取得类别
$fileType = strtolower($fileType);
if($fileType!='img'&& $fileType!='file') $fileType='img';
//取得上传的文件属性
//print_r($_FILES);
$files = $_FILES[$fileField];
for ($i=0;$i<count($files['name']);$i++)
{
$fileName = $files['name'][$i]; //文件名
if($fileName=="") continue;
$this->uploadFileName[] = $fileName;
$fileTemp = $files['tmp_name'][$i]; //临时文件名
$this->tempFileName[] = $fileTemp ;
$fileSize = $files['size'][$i]; //文件大小
//取得文件后缀
$this->uploadFileType = FileIO::getFileType($fileName);
//判断文件的大小
if($fileSize > $this->uploadFileFize)
{
goToError("文件最大 {$this->uploadFileFize} k! {$fileName} 超大");
return false;
}
//判断文件类型是否符合
if(!in_array($this->uploadFileType,$allowFile[$fileType]))
{
goToError("{$fileName} 文件类型不符合要求 只能是 ".implode(',',$allowFile[$fileType]));
return false;
}
}
return true;
}
//取得上传文件名
function getUploadFileName($uploadFile)
{
$name = "";
$name = date('Y-m/').date("Y,m,d,H,i,s")."_".$uploadFile;
return $name;
}
//上传执行
function exec($upLoadDir)
{
//设置错误数组
$suc = array();
//处理目录字符串
$upLoadDir = preg_replace('////','/',$upLoadDir);
//判断是否有/
if(substr($upLoadDir,0,-1)!="/") $upLoadDir.'/';
//判断目标文件是否为空
if(empty($this->tempFileName)) return false;
for ($i=0;$i<count($this->tempFileName);$i++)
{
//创建目录 添加文件名
$fileName = $this->getUploadFileName($this->uploadFileName[$i]);
//设置上传的物理路径
$upLoadFile = $upLoadDir.$fileName;
//检查目录是否存在
$rUpLoadDir = dirname($upLoadFile);
if(!FileIO::isDirExists($rUpLoadDir))
{
if(!FileIO::createDir($rUpLoadDir))
{
goToError("建立 {$rUpLoadDir} 目录失败!");
return false;
}
}
//复值给目录默认文件
$this->uploadFileName[$i] = $fileName;
//上传文件
if(@move_uploaded_file($this->tempFileName[$i],$upLoadFile))
{
$suc[] = $this->uploadFileName[$i];
}
}
//驱除数组里相同的值,如果同时上传了同一个文件,上传的时候将覆盖
return array_unique($suc);
}
}
/*
此类作为一个多文件的长传类,就是一个文件,也要使用数组形式
返回上传成功的文件
此文件用了 FileIO 类里的,几个函数
现在放在下面方便大家以后移植使用
//取得文件后缀
function getFileType($fileName)
{
return end(explode('.',$fileName));
}
//建立目录
function createDir($dirName)
{
//echo $dirName;exit();
global $FILEERRORMSG;
$dirName = str_replace("/","/",$dirName);
$dirArr = explode('/',$dirName);
$dirTemp = "";
foreach( (array)$dirArr as $dir )
{
if( empty($dir) ) continue;
$dirTemp.= $dir."/";
if( !is_dir($dirTemp) )
{
if( !@mkdir($dirTemp,0777) )
{
trigger_error($FILEERRORMSG[0],SystemExceptionType(2));
return false;
}
}
}
return true;
}
//检查目录是否存在
function isDirExists( $dirName )
{
return file_exists( $dirName ) && is_dir( $dirName );
}
*/
?>
本文介绍了一个PHP实现的批量文件上传类,支持多种文件类型的上传,并具备文件大小限制等功能。该类通过简单的配置即可使用,适用于需要进行批量图片或文档上传的应用场景。
939

被折叠的 条评论
为什么被折叠?



