PHP实现的多文件上传类及用法示例


Posted in PHP onMay 06, 2016

本文实例讲述了PHP实现的多文件上传类及用法。分享给大家供大家参考,具体如下:

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程序设计有所帮助。

PHP 相关文章推荐
PHP的面试题集
Nov 19 PHP
php xml实例 留言本
Mar 20 PHP
PHP is_dir() 判断给定文件名是否是一个目录
May 10 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
Dec 20 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
Aug 11 PHP
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
Aug 21 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
Dec 28 PHP
php下载文件超时时间的设置方法
Oct 06 PHP
php 截取GBK文档某个位置开始的n个字符方法
Mar 08 PHP
asp函数split()对应php函数explode()
Feb 27 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 PHP
PHP开发api接口安全验证操作实例详解
Mar 26 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
May 06 #PHP
php将一维数组转换为每3个连续值组成的二维数组
May 06 #PHP
PHP递归遍历多维数组实现无限分类的方法
May 06 #PHP
PHP图片加水印实现方法
May 06 #PHP
php数组冒泡排序算法实例
May 06 #PHP
PHP中子类重载父类的方法【parent::方法名】
May 06 #PHP
[原创]PHP字符串中插入子字符串方法总结
May 06 #PHP
You might like
菜鸟修复电子管记
2021/03/02 无线电
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
vue实现评论列表功能
2019/10/25 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
python之virtualenv的简单使用方法(必看篇)
2017/11/25 Python
《Python学习手册》学习总结
2018/01/17 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
Python装饰器的执行过程实例分析
2018/06/04 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
控制工程专业个人求职信
2013/09/25 职场文书
我的五年职业生涯规划
2014/01/23 职场文书
公司委托书格式范文
2014/04/04 职场文书
教师一岗双责责任书
2014/04/16 职场文书
园林技术专业求职信
2014/07/28 职场文书
皇城相府导游词
2015/02/06 职场文书
2015年库房管理工作总结
2015/10/14 职场文书