1、upfiles.css.php 文件
<?php
class uploadfiles{
private $maxsize = '1000000'; //允许上传文件最大长度
private $allowtype = array('jpg','png','gif','jpeg');//允许上传文件类型
private $israndfile = true;//是否随机文件名
private $filepath;//上传路径
private $originname;//上传的源文件
private $tmpfilename;//临时文件名
private $newfilename;//新文件名
private $filesize;//文件大小
private $filetype;//文件类型
private $errornum = 0;//错误号
private $errormessg = array();//错误消息
//对成员初始化
function construct($options = array()){
foreach($options as $key=>$val){
$key = strtolower($key);
//查看传进来的数组里下标是否与成员属性相同
//print_r(array_keys(get_class_vars(get_class($this))));
if(!in_array($key,array_keys(get_class_vars(get_class($this))))){
continue;
}else{
$this->setoption($key,$val);
}
}
}
private function setoption($key,$val){
$this->$key = $val;
//echo $this->errornum."<br>";
}
//检查文件上传路径
private function checkfilepath(){
//echo $this->filepath;
if(empty($this->filepath)){
$this->setoption('errornum',"-5");
return false;
}
if(!file_exists($this->filepath) || !is_writable($this->filepath)){
if(!@mkdir($this->filepath,0755)){
$this->setoption('errornum','-4');
return false;
}
}
return true;
}
//获取错误信息
private function geterror(){
$str = "上传文件{$this->originname}出错---";
switch($this->errornum){
case 4; $str .= "没有文件被上传";break;
case 3; $str .= "文件只被部分上传";break;
case 2; $str .= "超过文件表单允许大小";break;
case 1; $str .= "超过php.ini中允许大小";break;
case -1; $str .= "未允许的类型";break;
case -2; $str .= "文件过大,不能超过".$this->maxsize."个字节";break;
case -3; $str .= "上传失败";break;
case -4; $str .= "建立文件上传目录失败";break;
case -5; $str .= "必须指定上传路径";break;
default; $str .= "未知错误";
}
return $str."<br>";
}
//检查文件类型
private function checkfiletype(){
//echo $this->filetype;
if(!in_array(strtolower($this->filetype),$this->allowtype)){
$this->setoption('errornum','-1');
return false;
}else{
return true;
}
}
//检查文件大小
private function checkfilesize(){
if($this->filesize > $this->maxsize){
$this->setoption('errornum','-2');
return false;
}else{
return true;
}
}
//处理随机文件名称
private function prorandfile(){
$ch = $this->israndfile;
if($ch == 'true'){
return true;
}else{
return false;
}
}
//
private function setfiles($name="",$tmp_name="",$size="",$error=""){
//检查上传路径
if(!$this->checkfilepath()){
//$this->errormessg = $this->geterror();
return false;
}
//echo $error."<br>";
if($error){
$this->setoption('errornum',$error);
return false;
}
$arrstr = explode('.',$name);
$type = end($arrstr);
$this->setoption('originname',$name);
$this->setoption('filesize',$size);
$this->setoption('filetype',$type);
$this->setoption('tmpfilename',$tmp_name);
return true;
}
//检查是否有文件上传
function checkfile($formname){
if(!@$_files[$formname]){
$this->setoption('errornum',4);
return false;
}else{
return true;
}
}
//上传文件
function uploadefile($formname){
if(!$this->checkfile($formname)){
$this->errormessg = $this->geterror();
return false;
}
$return = true;
$name = @$_files[$formname]['name'];
$tmp_name = @$_files[$formname]['tmp_name'];
$size = @$_files[$formname]['size'];
$error = @$_files[$formname]['error'];
//$type = $_files[$formname]['type'];
if(is_array($name)){
$errors = array();
for($i=0; $i<count($name); $i++){
if($this->setfiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
if(!$this->checkfilesize() || !$this->checkfiletype()){
$errors[] = $this->geterror();
$return = false;
}
}else{
$errors[] = $this->geterror();
$return = false;
}
if(!$return) $this->setfiles();
}
if($return){
$newfilen = array();
for($i=0; $i<count($name); $i++){
if($this->setfiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
if(!$this->copyfile()){
$errors[] = $this->geterror();
$return = false;
}else{
$newfilen[] = $this->newfilename;
}
}
$this->newfilename = $newfilen;
}
}
//print_r($errors);
$this->errormessg = $errors;
//echo $errors;
return $return;
}else{
if($this->setfiles($name,$tmp_name,$size,$error)){
$return = true;
if($error) var_dump($error);
if($this->checkfilesize() && $this->checkfiletype()){
}else{
$return = false;
}
}else{
$return = false;
}
if(!$return){
$this->errormessg = $this->geterror();
}
return $return;
}
}
//获取上传后的文件名
function getnewfile(){
return $this->newfilename;
}
//把文件拷贝到指定的路径
function copyfile(){
$filepath = rtrim($this->filepath,'/')."/";
if(!$this->errornum){
if($this->prorandfile()){
$this->newfilename = date('ymdhis').rand(1000,9999).".".$this->filetype;
}else{
$this->newfilename = $this->originname;
}
if(!move_uploaded_file($this->tmpfilename,$filepath.$this->newfilename)){
$this->setoption('errornum',-3);
return false;
}else{
return true;
}
}else{
return false;
}
}
//上传错误后返回的消息
function gteerror(){
$err = $this->errormessg;
return $err;
}
}
?>
2、使用方法
uploade.php 文件:
<?php
//print_r($_files['spic']);
header('content-type:text/html;charset=utf-8');
//if(@$_files['spic'])echo "ddddddddd";;
include('upfiles.css.php');
$upfile = new uploadfiles(array('filepath'=>'./upload','allowtype'=>array('php','bmp','gif','jpg','png'),'israndfile'=>true,'maxsize'=>'1000000'));
if($upfile ->uploadefile('spic')){
$arrfile = $upfile ->getnewfile();
foreach($arrfile as $v){
echo $v,"<br/>";
}
echo "上传成功!";
}else{
$err = $upfile ->gteerror();
if(is_array($err)){
foreach($err as $v1){
echo $v1,"<br/>";
}
}else{
echo $err;
}
//var_dump($err);
}
//var_dump($upfile);
?>
html 文件:
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"
"http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
function check(){
//alert('dddd');
for(i=1; i<9; i++){
if(document.getelementbyid('v'+i).value == ''){
document.getelementbyid('v'+i).name = 'uu';
}
}
}
</script>
</head>
<body>
<form name="upfile" action="uploade.php" method="post" enctype="multipart/form-data">
<input type="file" name="spic[]" id="v1" /><br/>
<input type="file" name="spic[]" id="v2" /><br/>
<input type="file" name="spic[]" id="v3" /><br/>
<input type="file" name="spic[]" id="v4" /><br/>
<input type="file" name="spic[]" id="v5" /><br/>
<input type="file" name="spic[]" id="v6" /><br/>
<input type="file" name="spic[]" id="v7" /><br/>
<input type="file" name="spic[]" id="v8" /><br/>
<input type="submit" name="sub" value="提交" onclick="return check()" />
<input type="reset" name="res" value="重填" />
</form>
</body>
</html>
以上就是php多文件上传类及用法实例详解的详细内容。
