文档章节

PHP教程之php文件上传类

c
 czk19900520
发布于 2017/06/04 16:29
字数 642
阅读 4
收藏 0
点赞 0
评论 0

/*

*千锋PHP独家

*/

class Upload { //保存路径 protected $savePath = './'; //日期目录 protected $datePath = true; //随机名字 protected $randName = true; //默认后缀 protected $extension = 'png'; //允许MIME protected $mimes = ['image/png','image/jpeg','image/gif']; //允许后缀 protected $suffixes = ['png','jpg','jpeg','gif']; //最大尺寸 protected $maxSize = 2000000; //错误代码 protected $errorNumber = 0; //错误信息 protected $errorMessage = '上传成功'; //上传信息 protected $uploadInfo; //文件名称 protected $pathName; public function __construct($options=null) { $this->setOption($options); }

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。互联网+时代,时刻要保持学习,携手千锋PHP,Dream It Possible。

public function setOption($options) { if (is_array($options)) { $keys = get_class_vars(__CLASS__); foreach ($options as $key => $value) { //在属性列表中才设置属性 if (in_array($key, $keys)) { $this->$key = $value; } } } } public function uploadFile($field) { //1、检查保存路径 if (!$this->checkSavePath()) { return false; } //2、检查上传信息 if (!$this->checkUploadInfo($field)) { return false; } //3、检查系统错误 if (!$this->checkUploadError()) { return false; } //4、检查自定义错误 if (!$this->checkAllowOption()) { return false; } //5、检车是否是上传文件 if (!$this->checkUploadFile()) { return false; } //6、拼接路径名 $this->joinPathName(); //7、移动上传文件 if (!$this->moveUploadFile()) { return false; } return true; } protected function checkSavePath() { if (!is_dir($this->savePath)) { $this->errorNumber = -1; $this->errorMessage = '保存路径不存在'; return false; } if (!is_writable($this->savePath)) { $this->errorNumber = -2; $this->errorMessage = '保存路径不可写'; return false; } $this->savePath = rtrim($this->savePath,'/') . '/'; return true; } protected function checkUploadInfo($field) { if (empty($_FILES[$field])) { $this->errorNumber = -3; $this->errorMessage = '没有'.$field.'相关上传信息'; return false; } $this->uploadInfo = $_FILES[$field]; return true; } protected function checkUploadError() { if ($this->uploadInfo['error'] == 0) { return true; } switch ($this->uploadInfo['error']) { case UPLOAD_ERR_INI_SIZE: $this->errorMessage = '超出了配置文件中设定文件大小'; break; case UPLOAD_ERR_FORM_SIZE: $this->errorMessage = '超出了MAX_FILE_SIZE的大小'; break; case UPLOAD_ERR_PARTIAL: $this->errorMessage = '只有部分文件被上传'; break; case UPLOAD_ERR_NO_FILE: $this->errorMessage = '没有文件被上传'; break; case UPLOAD_ERR_NO_TMP_DIR: $this->errorMessage = '没有找到临时文件夹'; break; case UPLOAD_ERR_CANT_WRITE: $this->errorMessage = '文件写入失败'; break; default: $this->errorMessage = '未知错误'; break; } $this->errorNumber = $this->uploadInfo['error']; return false; } protected function checkAllowOption() { if (!in_array($this->uploadInfo['type'],$this->mimes)) { $this->errorNumber = -4; $this->errorMessage = '不允许的MIME:'.$this->uploadInfo['type']; return false; } if (!in_array($this->extension,$this->suffixes)) { $this->errorNumber = -5; $this->errorMessage = '不允许的后缀:'.$this->extension; return false; } if ($this->uploadInfo['size'] > $this->maxSize) { $this->errorNumber = -6; $this->errorMessage = '超出了规定大小:'.$this->maxSize.'字节'; return false; } return true; } protected function checkUploadFile() { if (!is_uploaded_file($this->uploadInfo['tmp_name'])) { $this->errorNumber = -7; $this->errorMessage = '不是上传文件'; return false; } return true; } protected function joinPathName() { //路径 $this->pathName = $this->savePath; if ($this->datePath) { $this->pathName .= date('Y/m/d/'); if (!file_exists($this->pathName)) { mkdir($this->pathName,0777,true); } } //名字 if ($this->randName) { $this->pathName .= uniqid(); } else { $info = pathinfo($this->uploadInfo['name']); $this->pathName .= $info['filename']; } //后缀 $this->pathName .= '.' . $this->extension; } protected function moveUploadFile() { if (move_uploaded_file($this->uploadInfo['tmp_name'], $this->pathName)) { return true; } $this->errorNumber = -8; $this->errorMessage = '上传文件保存'; return false; } }

本文转载自:

共有 人打赏支持
c
粉丝 0
博文 10
码字总数 0
作品 0
PHP.INI配置:文件上传功能配置教程

昨天分享了在PHP网站开发中如何在php.ini中配置实现session功能的PHP教程,今天继续分享在利用PHP实现文件上传功能时几点关键php.ini的配置。   说到在php.ini中的文件上传的配置,其实在之...

张志浩 ⋅ 2012/10/08 ⋅ 0

yii框架整合Smarty

必须说明的是,本教程里所有的YII框架开发网站项目是整合Smarty来开发的,Smarty作为最成熟使用最多的模板之一,相信大家都比较熟悉。如果还有的同学不是很熟悉,可以参考Smarty教程。不过就...

蜗牛奔跑 ⋅ 2015/11/20 ⋅ 0

PHP MVC框架--SimplePHP

SimplePHP ===== 自己动手写PHP MVC框架 PHP的框架众多,对于哪个框架最好,哪个框架最烂,是否应该用框架,对于这些争论在论坛里面都有人争论,这里不做评价, 个人觉得根据自己需求,选中最...

sunny5156 ⋅ 2013/12/23 ⋅ 0

PHP框架--CXPHP

PHP的框架众多,对于哪个框架最好,哪个框架最烂,是否应该用框架,对于这些争论在论坛里面都有人争论,这里不做评价, 个人觉得根据自己需求,选中最佳最适合自己MVC框架,并在开发中能够体...

sunny5156 ⋅ 2013/09/23 ⋅ 0

PentesterLab新手教程(四):文件包含

  PentesterLab 简介   Web for pentester 是国外安全研究者开发的的一款渗透测试平台。   这个平台包含的主要漏洞如下:      Code injection (代码注入)   Commands inject...

FreeBuf ⋅ 05/11 ⋅ 0

解决phpmyadmin上传文件大小限制的配置方法

解决phpmyadmin上传文件大小限制的配置方法  phpmyadmin导入SQL文件时涉及到phpmyadmin上传文件大小限制问题,默认phpmyadmin上传文件大小为2M,如果想要phpmyadmin上传超过2M大文件,就需要...

喵王不瞌睡 ⋅ 2014/10/29 ⋅ 0

PHP视频教程搜集整理分享【www.eaglephp.com】

1、PHP视频教程 (第一讲) PHP环境搭配和代码调试 2、PHP视频教程 (第二讲) PHP的数据类型 源码调试 3、PHP视频教程 (第三讲) 常用PHP运算类型介绍与应用 4、PHP视频教程 (第四讲) PHP条件语句...

maoxiaojian ⋅ 2013/02/28 ⋅ 5

《CURL技术知识教程》系列技术教程整理

《CURL技术知识教程》系列技术教程整理 有时间会不断更新,大家有什么好的推荐的可以在下面回复,我会酌情收录 1PHP采集相关教程之一 CURL函数库 2php中通过curl模拟登陆discuz论坛的实现代码...

开元中国2015 ⋅ 2015/05/07 ⋅ 0

10个有趣的 PHP 教程

1. 整合 pChart 和 Google Analytics 在这篇文章中,你可以学到如何整合 pChart(一个 php 图表库) 和 Google Analytics 以获得你想要的结果。 2. 用 PHP 创建 Instagram 效果 在这个教程中,...

虫虫 ⋅ 2012/04/27 ⋅ 6

joomla1.5前台组件开发过程分享(附中文开发教程两本)

    上一次分享到一个后台组件开发,也许我讲的不是很明白,不过你们把源代码拿去以后应该可以看懂,我是完全按照MVC模式开发的。今天呢,就 来分享一下前台组件开发,我这里的前台组件和...

yoby ⋅ 2012/05/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

R计算IV

参考文章 #读取文件 rawdata = read.csv("/path/to/csv/file",header=T) colnames(rawdata)[18] <- "y" //重命名因变量y #数据分区 训练集测试集 trainIdx <- sample(nrow(rawdata), round(......

火力全開 ⋅ 4分钟前 ⋅ 0

SQL老司机,在SQL中计算 array & map & json数据

摘要: 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据。 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primi...

阿里云云栖社区 ⋅ 4分钟前 ⋅ 0

SQL老司机,在SQL中计算 array & map & json数据

摘要: 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据。 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primi...

猫耳m ⋅ 15分钟前 ⋅ 0

关于ireport自定义变量类型为list的时候

自己摸石头过河,我真的应该去趟市中心图书馆,借本真正靠谱的教材 网上的东西,只有0.01%是有用的,还有0.99%是垃圾,剩下的99%是垃圾的复制品。。 哎!~ 问题是这样的,报表带sql,从db中获...

炑炑milina ⋅ 16分钟前 ⋅ 0

Spring mvc ContextLoaderListener 原理解析

对于熟悉Spring MVC功能,首先应从web.xml 开始,在web.xml 文件中我们需要配置一个监听器 ContextLoaderListener,如下。 <!-- 加载spring上下文信息,最主要的功能是解析applicationContex...

轨迹_ ⋅ 16分钟前 ⋅ 0

阿里云发布企业数字化及上云外包平台服务:阿里云众包平台

摘要: 阿里云正式发布旗下众包平台业务(网址:https://zhongbao.aliyun.com/),支持包括:网站定制开发,APP、电商系统等软件开发,商标、商品LOGO、VI、产品包装设计、营销推广、大数据人...

阿里云官方博客 ⋅ 18分钟前 ⋅ 0

Redis安装异常解决办法

官网地址:http://redis.io/ 官网下载地址:http://redis.io/download 1. 下载Redis源码(tar.gz),并上传到Linux 2. 解压缩包:tar zxvf redis-2.8.17.tar.gz 3. 进入解压缩后的文件夹:c...

slagga ⋅ 22分钟前 ⋅ 0

006. 深入JVM学习—年轻代

1. 年轻代图片 年轻代(Young)属于JVM堆内存空间的一个组成部分 所有使用关键字new新实例化的对象一定会在伊甸园区进行保存,而对于存活区保存的一定是已经在伊甸园区存在一段时间并且经过了...

影狼 ⋅ 23分钟前 ⋅ 0

如何成为一个合格的程序员

偶尔的,我会被人问道:如何成为一名优秀的程序员,更或者,如何成为一名程序员。每次人们问起,我都力图给出不同的答案。因此,我的答案是各种各样的。下面就是我认为的成为一名优秀的程序员...

柳猫 ⋅ 24分钟前 ⋅ 0

cups error_log日志暴增

日志内容 File \"/usr/lib/cups/notifier/dbus\" has insecure permissions 解决(未验证适用范围) sudo service cups stopsudo rm /etc/cups/subscriptions.conf*sudo rm -r /var/cac......

一介码夫_Hum ⋅ 28分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部