文档章节

PHP教程之php文件上传类

c
 czk19900520
发布于 2017/06/04 16:29
字数 642
阅读 5
收藏 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
0
PHP MVC框架--SimplePHP

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

sunny5156
2013/12/23
1K
0
10个有趣的 PHP 教程

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

虫虫
2012/04/27
3.8K
6
PHP框架--CXPHP

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

sunny5156
2013/09/23
813
0
PentesterLab新手教程(四):文件包含

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

FreeBuf
05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

10-《深度拆解JVM》JVM是怎么实现invokedynamic的?(下)

一、问题引入 上回讲到,为了让所有的动物都能参加赛马,Java 7 引入了 invokedynamic 机制,允许调用任意类的“赛跑”方法。不过,我们并没有讲解 invokedynamic,而是深入地探讨了它所依赖...

飞鱼说编程
4分钟前
0
0
457. Circular Array Loop

Description Difficulty : Medium You are given an array of positive and negative integers. If a number n at an index is positive, then move forward n steps. Conversely, if it's n......

52iSilence7
20分钟前
0
0
MySQL SQL 常见用法

某字段重复记录 select a.fieldA from tableA a group by a.fieldA having count(a.fieldA)>1;==select * from (select a.fieldA, count(1) as faCount from tableA a group......

园领T
今天
1
0
如何使用 iptables 和 firewalld 工具来管理 Linux 防火墙规则

以下是如何使用 iptables 和 firewalld 工具来管理 Linux 防火墙规则。 防火墙 防火墙是一组规则。当数据包进出受保护的网络区域时,进出内容(特别是关于其来源、目标和使用的协议等信息)会...

linuxprobe16
今天
1
0
发生系统错误 5 拒绝访问

1、使用命令net start *开启一个服务的时候,出现发生系统错误5,拒绝访问。 解决:切换到管理员模式执行此命令即可。

fang_faye
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部