-
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(emptyempty($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;
- //phpfensi.com
- }
- }
- ?>
- </count($name);></count($name);>
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;
- //phpfensi.com
- }
- //var_dump($err);
- }
- //var_dump($upfile);
- ?>
HTML 文件:
- <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>
- <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>
出处:http://www.phpfensi.com/php/20190730/12331.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式