BIGQI框架::FilesUpload批量上传类..

HTML页面部分:
XML/HTML代码
 


    <form enctype=\"multipart/form-data\" method=\"post\" name=\"upform\">
    上传文件: br><br>
    <input name=\"upfile[]\" type=\"file\" size=\"30\"><br><br>
    <input name=\"upfile[]\" type=\"file\" size=\"30\"><br><br>
    <input name=\"upfile[]\" type=\"file\" size=\"30\"><br><br>
    <input name=\"upfile[]\" type=\"file\" size=\"30\"><br><br>
    <input type=\"submit\" value=\"上传\" size=\"17\">
    </form>









核心类

 

引用


/*
* The FilesUpload Class
* $ By Haierspi $
* $ 2009-9-9 $
*/
class FilesUpload {
var $maxsize = 0 ;
var $src_fsizes = 0;
var $sux = array ('gif', 'jpg', 'png', 'zip', 'rar', 'txt', 'doc', 'pdf');
var $dst_path = './upload';
var $dst_name = 'MD5(time()).\'.\'.$Files[\'type\'];';
var $errver = false;
var $errfile = 0;
var $errno = 0;
var $error = '';
var $reinfo = '';
function __construct(){
$this->FilesUpload();
}

function FilesUpload(){
$this->maxsize = (int) ini_get ( 'upload_max_filesize' ) * 1024 * 1024;
$this->dst_path = BIGQI_ROOT.$this->dst_path;
}
function maxsize($maxsize){
$this->maxsize = $maxsize * 1024; //kb
}
function send($Uploadfiles){
for($i = 0; $i < count ( $Uploadfiles ['name'] ); $i ++) {
$upload_name = $Uploadfiles ['name'] [$i];
$upload_tmpname = $this->str_fillter ( $Uploadfiles ['tmp_name'] [$i] );
$upload_size = $Uploadfiles ['size'] [$i];
$upload_mime = $Uploadfiles ['type'] [$i];
$upload_type = getfilesux ( $Uploadfiles ['name'] [$i] );
if (!$upload_name && !$upload_tmpname && !$upload_size && !$upload_mime && !$upload_type){
continue;
}
if ($Uploadfiles ['error'] [$i] != 0) {
$this->errver = true;
$this->errfile = $i;
$this->errno = 10;
$this->error = $Uploadfiles ['error'] [$i];
return false;
}
if (! in_array ( $upload_type, $this->sux )) {
$this->errver = true;
$this->errfile = $i;
$this->errno = 20;
$this->error = 'UploadFile type error!';
return false;
}
if (! is_uploaded_file ( $upload_tmpname )) {
$this->errver = true;
$this->errfile = $i;
$this->errno = 30;
$this->error = 'UploadFile tmpname error!';
return false;
}
if (! $upload_size ) {
continue;
}else{
$this->src_fsizes += $upload_size;
}
$DstFiles [$i] ['name'] = $upload_name;
$DstFiles [$i] ['temp'] = $upload_tmpname;
$DstFiles [$i] ['size'] = $upload_size;
$DstFiles [$i] ['type'] = $upload_type;
$DstFiles [$i] ['mime'] = $upload_mime;

}
if ($this->src_fsizes > $this->maxsize) {
$this->errver = true;
$this->errfile = $i;
$this->errno = 40;
$this->error = 'UploadFile maxsize too big!';
return false;
}
if (!$this->errver){
$savefullpath_array = array();
foreach($DstFiles as $key =>$Files){
$basename = basename ( $Files['name'], '.'.$Files['type'] );
do {
eval('$file_savename='.$this->dst_name.';');
$file_savefullpath = $this->dst_path . "/" . $file_savename;
} while ( file_exists ( $file_savefullpath ) );
if (! move_uploaded_file ( $Files['temp'], $file_savefullpath )) {
$this->errver = true;
$this->errfile = $i;
$this->errno = 50;
$this->error = 'UploadFile rename error!';
foreach($savefullpath_array as $filesed){
delfile($filesed);
}
unset($savefullpath_array);
return false;
}else{
$DstFiles[$key]['sname'] = $file_savename;
$savefullpath_array[] = $file_savefullpath;
}
}
$this->reinfo = $DstFiles;
unset($savefullpath_array,$DstFiles,$_FILES);
return $DstFiles;
}
}
function str_fillter($string) {
$string = str_replace("[url=]\\\[/url]"", "\"", $string);
$string = str_replace("[url=file://\\]\\'[/url]", "'", $string);
$string = str_replace("[url=]\\\\[/url]", "\\", $string);
return $string;
}
}
function delfile($path) {
if (file_exists ( $path )) {
if (! is_dir ( $path )) {
unlink ( $path );
return true;
} else {
return false;
}
}
}
 



使用方法:
 

引用

$upload = new FilesUpload(); $upload ->dst_path = $uploadpath;
$upload -> send($_FILES[upfile]);
var_dump ($upload -> reinfo);
 



这里我补充下.. 这个函数 会对上传的各个环节进行检测 如果有其中的任意出问题..
会直接反应在 FilesUpload::errver 上..
并且 在文件名命名的地方我用了eval 动态执行函数.. 这样就可以再类初始化的时候初始化 上传保存文件名的 命名规则
另外可以设置上传大小显示 以及配置上传类型限制
以下我做个示范..
比如上面的使用方法
 

引用

$upload = new FilesUpload();
$upload->dst_name = 'MD5(time()).\'.\'.$Files[\'type\'];'; //从新定义命名规则,用时间戳的MD5值对上传文件进行命名
$upload -> maxsize(500); //显示批量上传的总大小限制为500KB (如果大家想用字节单位 请直接用FilesUpload::maxsize属性)
$upload ->dst_path = './upload/'; //设置上传文件保存的目录
$upload ->sux = array ('gif', 'jpg', 'png'); //从新设置 允许的上传文件类型 这里限制为仅限图片上传
$upload -> send($_FILES[upfile]); //开始处理上传
var_dump ($upload -> reinfo);