文件上传与下载学习笔记(3)---面向对象方法实现文件上传

代码:

  1 <?php
  2 class uploadClass {
  3     protected $filename;
  4     protected $maxSize;
  5     protected $allowExt;
  6     protected $allowMime;
  7     protected $uploadPath;
  8     protected $imgFlag;
  9     protected $fileInfo;
 10     protected $error;
 11     protected $ext;
 12     protected $uniName;
 13     protected $dst;
 14     //构造函数初始化
 15     public function __construct($fileName = "myFile", $uploadPath = "oop", $maxSize = 5242880, $allowExt = array("jpeg","jpg","png","gif"), $allowMime = array("image/jpeg","image/jpg","image/png","image/gif"), $imgFlag = false) {
 16         $this->fileName = $fileName;
 17         $this->fileInfo = $_FILES [$this->fileName];
 18         $this->maxSize = $maxSize;
 19         $this->allowMime = $allowMime;
 20         $this->ext = pathinfo ( $this->fileInfo [‘name‘], PATHINFO_EXTENSION );
 21         $this->allowExt = $allowExt;
 22         $this->uploadPath = $uploadPath;
 23         $this->imgFlag = $imgFlag;
 24         $this->uniName=md5(uniqid(microtime(true),true));
 25         $this->dst=$this->uploadPath.‘/‘.$this->uniName.‘.‘.$this->ext;
 26     }
 27     /**
 28      * 检测上传是否有错
 29      *
 30      * @return boolean
 31      */
 32     protected function checkError() {
 33         if ($this->fileInfo [‘error‘] == 0) {
 34             return true;
 35         } else {
 36             switch ($this->fileInfo [‘error‘]) {
 37                 case 1 :
 38                     $this->error = $fileInfo [‘name‘] . ‘上传文件超过了upload_max_filesize 选项的值‘;
 39                     break;
 40                 case 2 :
 41                     $this->error = $fileInfo [‘name‘] . ‘超过了表单MAX_FILE_SIZE限制的大小‘;
 42                     break;
 43                 case 3 :
 44                     $this->error = $fileInfo [‘name‘] . ‘文件上传不完整‘;
 45                     break;
 46                 case 4 :
 47                     $this->error = $fileInfo [‘name‘] . ‘没有选择上传文件‘;
 48                     break;
 49                 case 6 :
 50                     $this->error = $fileInfo [‘name‘] . ‘没有找到临时目录‘;
 51                     break;
 52                 case 7 :
 53                     $this->error = $fileInfo [‘name‘] . ‘文件写入失败‘;
 54                     break;
 55                 case 8 :
 56                     $this->error = $fileInfo [‘name‘] . ‘文件上传被php扩展程序中断‘;
 57                     break;
 58             }
 59             return false;
 60         }
 61     }
 62     /**
 63      * 检查文件大小
 64      *
 65      * @return boolean
 66      */
 67     protected function checkSize() {
 68         if ($this->fileInfo [‘size‘] > $this->maxSize) {
 69             $this->error = "上传文件过大";
 70             return false;
 71         } else {
 72             return true;
 73         }
 74     }
 75     /**
 76      * 检查文件类型
 77      *
 78      * @return boolean
 79      */
 80     protected function checkExt() {
 81         if (! in_array ( $this->ext, $this->allowExt )) {
 82             $this->error = "不正确的文件";
 83             return false;
 84         } else {
 85             return true;
 86         }
 87     }
 88     /**
 89      * 检测文件的Mime类型
 90      *
 91      * @return boolean
 92      */
 93     protected function checkMime() {
 94         if (! in_array ( $this->fileInfo [‘type‘], $this->allowMime )) {
 95             $this->error = "文件类型不正确";
 96             return false;
 97         } else {
 98             return true;
 99         }
100     }
101     /**
102      * 检测是否是真实图片
103      *
104      * @return boolean
105      */
106     protected function checkTureImg() {
107         if ($this->imgFlag) {
108             if (@! getimagesize ( $this->fileInfo [‘tmp_name‘] )) {
109                 $this->error = "不是真正的图片";
110                 return false;
111             } else {
112                 return true;
113             }
114         }else{
115             return true;
116         }
117     }
118     /**
119      * 检测是否通过HTTP POST 上传
120      * @return boolean
121      */
122     protected function checkPost() {
123         if (!is_uploaded_file ( $this->fileInfo [‘tmp_name‘] )) {
124             $this->error = "不是通过 HTTP POST 方式上传";
125             return false;
126         } else {
127             return true;
128         }
129     }
130     /**
131      * 显示错误信息
132      */
133     protected function showError(){
134         exit("<span color=‘red‘>".$this->error."</span>");
135     }
136     /**
137      * 检测文件夹是否存在,不存在则创建
138      */
139     protected function checkPath(){
140         if(!file_exists($this->uploadPath)){
141             mkdir($this->uploadPath,0777,true);
142         }
143     }
144     /**
145      * 文件上传公共接口
146      */
147     public function uploadfile() {
148         if ($this->checkError () && $this->checkSize () && $this->checkExt () && $this->checkMime ()  && $this->checkPost () && $this->checkTureImg()) {
149             $this->checkPath();
150             if(move_uploaded_file($this->fileInfo[‘tmp_name‘], $this->dst)){
151                 return $this->dst;
152             }else{
153                 $this->error="文件移动失败";
154                 $this->showError();
155             }
156         } else {
157             $this->showError ();
158         }
159     }
160 }
时间: 2024-11-05 12:29:52

文件上传与下载学习笔记(3)---面向对象方法实现文件上传的相关文章

文件上传与下载学习笔记(2)---多文件、单文件、多个单文件函数封装

一:前导知识点: 1:is_string()判断一个变量是否是字符串 is_array 判断一个变量是否是数组 2:pathinfo()函数可以获取文件的扩展名. 3:创建目录函数 mkdir() 4: 生成唯一的随机数 uniqid() 5:判断文件.目录是否存在file_exsits() 二:思路与流程 三:封装的函数代码 1 <?php 2 /** 3 * 得到想要的文件类型 4 * @return unknown 5 */ 6 function getFiles() { 7 $i = 0

文件上传与下载学习笔记(1)---文件上传原理及配置

一:原理:将客户端的文件上传到服务器端的临时目录,再将服务器端的临时文件移动到指定目录. 二:客户端的配置 表单的method必须为post方法 表单必须添加enctype="multipart/form-data"属性 二者缺一不可. 三:将临时文件移动到指定目录 两种方法:1:move_uploaded_file($filename, $destination) 2:copy($source, $dest) 四:php.ini中的配置 在php.ini中搜索uploads ,会看到

文件上传与下载学习笔记(4)---文件下载

对于图片格式.HTML格式的文件,浏览器可以直接解析,但是如果不想让浏览器解析,让浏览器下载怎么办? 1 <?php 2 header("content-disposition:attachment;filename=".basename("1.jpg"));//basename()的使用 3 header("content-length:".filesize("1.jpg")); //下载时提示文件大小 4 readf

NFC学习笔记——三(在windows操作系统上安装libnfc)

本篇翻译文章: 这篇文章主要是说明如何在windows操作系统上安装.配置和使用libnfc. 一.基本信息 1.操作系统: Windows Vista Home Premium SP 2 2.硬件信息: System: Dell Inspiron 1720 Processor: Intel Core 2 Duo CPU T9300 @ 2.5GHz 2.5GHz System type: 32-bit Operating System 3.所需软件: 在windows操作系统上安装软件需要下列

Maven学习笔记之——坐标和依赖(上)

Maven学习笔记之--坐标和依赖(上) 1.    Maven坐标概念 Maven通过构件的坐标来在Maven仓库中定位到具体的构件.Maven的坐标元素包括groupId.artifactId.versiion.packaging.classifier.Maven内置了一个中央仓库地址.需要时Maven会根据坐标到其中下载.具体关于中央仓库的介绍在后面. 2.    Maven坐标详解 比如下面一组坐标: <groupId>org.andy.items</groupId> &l

Linux学习笔记——例说makefile 头文件查找路径

0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力.所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法. 例说makefile大致分为4个部分 1.只有单个C文件 2.含有多个C文件 3.需要包括头文件路径 4.一个较为复杂的例子 [代码仓库]--makefile-example 代码仓库位于bitbucket,可借助Tortoise

Laravel学习笔记(三)--在CentOS上配置Laravel

在Laravel框架上开发了几天,不得不说,确实比较优雅,处理问题逻辑比较清楚. 今天打算在CentOS 7上配置一个Laravel,之前都是在本机上开发,打算实际配置一下. 1)系统上已经安装了Apache.PHP.mysql,安装命令为yum install httpd php mysql 因为CentOS 7自带的php模块很少,如果需要增加模块,需要编译才行,所以需要php-devel模块,用yum install php-devel命令就可以了. 2)安装laravel a)安装com

APUE学习笔记:第四章 文件和目录

4.1 引言 本章将描述文件的特征和文件的性质 4.2 stat.fstat和lstat函数 #include<sys/stat.h> int stat(const char *restrict pathname,struct stat *restrict buf); int fstat(int filedes,struct stat *buf) int lstat(const char *restrict pathname,struct stat *restrict buf); 三个函数的返

IOS图层Layer学习笔记(二)—— CALayer(上)

IOS图层Layer学习笔记(二)-- CALayer(上) 简介 CALayer是所有图层的基类.主要是一些基本显示属性(位置.锚点.颜色.透明度等).层次关系(子图层和父图层).基本动画等. 接下来分别从常用属性.类方法和实例方法来介绍CALayer的使用.顺序是按头文件的排序来. 常用属性 bounds CGRect,Animatable.控制layer的大小,其中x和y无效果,默认是(0,0). position CGPoint,Animatable.控制layer锚点在父图层的位置.