PHP实现的多文件上传类及用法示例
这篇文章主要介绍了PHP实现的多文件上传类及用法,详细分析了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多文件上传类(含示例)
在网上看到一个比较好的多文件上传类,自己改良了下,顺便用js实现了多文件浏览,php文件上传原理都是相同的,多文件上传也只是进行了循环上传而已,当然你也可以使用swfupload进行多文件上传! &l ...
- ASP.NET 文件上传类 简单好用
调用: UploadFile uf = new UploadFile(); /*可选参数*/ uf.SetIsUseOldFileName(true);//是否使用原始文件名作为新文件的文件名(默认: ...
- PHP 文件上传类
FileUpload.; $]; $_newname = date(,). : To ...
- php 文件上传类 实例分享
最近在研究php上传的内容,找到一个不错的php上传类,分享下. <?php /** * 文件上传类 * class: uploadFile * edit: www.jbxue.com */ c ...
- [上传下载] C#FileUp文件上传类 (转载)
点击下载 FileUp.zip 主要功能如下 .把上传的文件转换为字节数组 .流转化为字节数组 .上传文件根据FileUpload控件上传 .把Byte流上传到指定目录并保存为文件 看下面代码吧 // ...
- ThinkPHP文件上传类
TP框架自带文件上传类使用: 类文件在ThinkPHP/Library/Think/默认在目录下 public function upload(){ $upload = new \Think\Uplo ...
- C#文件上传类,文件流,字节数组等
using System;using System.IO;using System.Web;using System.Web.UI.WebControls; namespace DotNet.Util ...
- Php文件上传类class.upload.php
简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮助你快速的给自己的网站集成上传文件功能.不仅如此,此分类还有一些列的处理功能,可以对上传的文件或者本地的文件进行处 ...
- 自定义MVC框架之工具类-文件上传类
截止目前已经改造了3个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 该文件上传类功能如下: 1,允许定制上传的文件类型,文件mime信息,文 ...
随机推荐
- JavaScript Browser 对象 实例
使用JavaScript来访问和控制浏览器对象实例. Window 对象 弹出一个警告框 弹出一个带折行的警告框 弹出一个确认框,并提醒访客点击的内容 弹出一个提示框 点击一个按钮时,打开一个新窗口 ...
- vim编程技巧
1, :E 浏览目录 如果你要改变当前浏览的目录,或是查看当前浏览的目录,你可以使用和shell一样的命令: :cd <dir> – 改变当前目录 :pwd - 查看当前目录 2, :l ...
- 设计模式--代理模式C++实现
代理模式C++实现 1定义 为其他对象提供一种代理以控制对这个对象的访问 2类图 角色定义: Subject抽象主体角色,抽象类或者接口,是一个普通的业务类型定义 RealSubject具体主体角色, ...
- 小米2S手机 - Charles无法安装证书 因为无法读取证书
1.不要使用小米原装的浏览器安装证书 2.使用第三方浏览器安装,如我使用的是UC浏览器 3.使用第三方浏览器安装的证书格式是".pem"格式问卷 4.将这个文件放入小米的downl ...
- Tomcat中session共享问题的简单解决办法
tomcat-redis-session-manager 使用redis配置tomcat共享session 结构图: 分析: 分布式web server集群部署后需要实现session共享,针对 to ...
- Windows音频SDK的发展历程
WASAPI is one of several native audio libraries in Windows. PortAudio actually supports five of them ...
- VMware虚拟机创建安装之后不出现VMnet1和VMnet8虚拟网卡
大家可能遇到过安装虚拟机之后,不出现这两张虚拟网卡,造成一系列的网络问题 VMware虚拟机无法将网络改为桥接状态 本人亲试可行的解决办法 首先把你之前安装的VMware虚拟机卸载,清理得一干二净: ...
- IOS-Quartz2D
一.画基本图形 // // BWView.m // IOS_0221_Quartz2D画矩形 // // Created by ma c on 16/2/21. // Copyright © 2016 ...
- 【Error】 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
mysql 登录输入密码有时会碰到如题的错误. 错误描述: Error 1045 (28000): Access denied for user 'root'@'localhost' (using p ...
- oracle 修改字符集 修改为ZHS16GBK
oracle数据库的字符集更改 A.oracle server 端 字符集查询 select userenv('language') from dual 其中NLS_CHARACTERSET 为ser ...