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高级OOP技术演示
Aug 27 PHP
PHP 图片上传代码
Sep 13 PHP
php断点续传之如何分割合并文件
Mar 22 PHP
ThinkPHP使用smarty模板引擎的方法
Jul 01 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Dec 14 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
Mar 04 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
PHP中单例模式的使用场景与使用方法讲解
Mar 18 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
May 27 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
cmd下运行php脚本
2008/11/25 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
Yii2实现自定义独立验证器的方法
2017/05/05 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
PHP实现的抓取小说网站内容功能示例
2019/06/27 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
理解 JavaScript 预解析
2009/10/25 Javascript
JavaScript 图片预览效果 推荐
2009/12/22 Javascript
Extjs显示从数据库取出时间转换JSON后的出现问题
2012/11/20 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
2016/06/13 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
详解Python的Django框架中的模版继承
2015/07/16 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
python http接口自动化脚本详解
2018/01/02 Python
Python 元类实例解析
2018/04/04 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
Python中and和or如何使用
2020/05/28 Python
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
Stefania Mode美国:奢华设计师和时尚服装
2018/01/07 全球购物
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
大班上学期幼儿评语
2014/04/30 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
python如何为list实现find方法
2022/05/30 Python