PHP面对对象的文件上传实验,PHP中面向对象的文件上传类

/**

*文件上传类

*

**/

class Upload

{

//上传到哪个目录

protected $path = './upload/';

//准许的MIME

protected $allowmime = ['image/png','image/jpg','image/jpeg','image/pjpeg','image/bmp','image/wbmp','image/gif','image/x-png'];

//准许的后缀

protected $allowsubfix = ['jpg','png','jpeg','gif','bmp'];

//准许的大小

protected $allowsize = 2097152;

//是否准许随机文件名

protected $israndname = true;

//是否准许日期目录

protected $isdatepath = true;

//文件的大小

protected $size;

//文件的原名

protected $orgname;

//文件的新名

protected $newname;

//文件的后缀

protected $subfix;

//文件的MIME类型

protected $mime;

//文件的新路径

protected $newpath;

//错误号

protected $errorno;

//错误信息

protected $errorinfo;

//临时文件

protected $tmpfile;

//前缀

protected $prefix;

//初使化成员属性,传进来的东西特别多,我们要求以数组的形式来传递

//foreach循环,取出键名、值

//将键名设置为成员属性名,将键值设为成员属性值

//注意键名的合法性

// errorInfo   errorinfo

public function __construct(Array $config = [])

{

foreach ($config as $key => $value) {

$this->setOption($key,$value);

}

}

protected function setOption($key,$value)

{

$key = strtolower($key);

$allPro = get_class_vars(get_class($this));

if (array_key_exists($key,$allPro)) {

$this->$key = $value;

}

}

//设置一个get方法专门获得新路径

//设置 一个get方法专门来获得错误信息

//成员方法上传方法

public function uploadFile($field)

{

//检测路径用户是否定义过,如果没有定义失败

if (!file_exists($this->path)) {

$this->setOption('errorNo',-1);

return false;

}

//目录权限检测

if (!$this->checkPath()) {

$this->setOption('errorNo',-2);

return false;

}

//获得$_FILES当中五个基本信息

$name = $_FILES[$field]['name'];

$size = $_FILES[$field]['size'];

$type = $_FILES[$field]['type'];

$tmpName = $_FILES[$field]['tmp_name'];

$error = $_FILES[$field]['error'];

//传入到一个成员方法里面进行设置

if (!$this->setFiles($name,$size,$type,$tmpName,$error)) {

return false;

}

//检测MIME是否合法,检测后缀是否合法,检测文件大小是否超过了自定义的大小

if (!$this->checkMime() || !$this->checkSubfix() || !$this->checkSize()) {

return false;

}

//新名

$this->newname = $this->getNewName();

//新路径处理

$this->newpath = $this->getNewPath();

//是否是上传文件

//如果是上传文件移动上传文件至指定的目录

//如果成员return true

return $this->move();

}

protected function move()

{

if (!is_uploaded_file($this->tmpfile)) {

$this->setOption('errorNo',-6);

return false;

}

if (move_uploaded_file($this->tmpfile,$this->newpath.$this->newname)) {

return true;

} else {

$this->setOption('errorNo',-7);

return false;

}

}

protected function getNewPath()

{

$this->path = rtrim($this->path,'/').'/';

if ($this->isdatepath) {

$newpath = $this->path.date('Y/m/d/');

if (!file_exists($newpath)) {

mkdir($newpath,0755,true);

}

return $newpath;

} else {

return $this->path;

}

}

protected function getNewName()

{

if ($this->israndname) {

return $this->prefix . uniqid() . '.' . $this->subfix;

} else {

return $this->prefix . $this->orgname;

}

}

protected function checkSize()

{

if ($this->size > $this->allowsize) {

$this->setOption('errorNo',-5);

return false;

} else {

return true;

}

}

protected function checkSubFix()

{

if (in_array($this->subfix,$this->allowsubfix)) {

return true;

} else {

$this->setOption('errorNo',-4);

return false;

}

}

protected function checkMime()

{

if (in_array($this->mime,$this->allowmime)) {

return true;

} else {

$this->setOption('errorNo',-3);

return false;

}

}

protected function setFiles($name,$size,$type,$tmpName,$error) {

//1 2 3 4 6 7  0(正常)

if ($error) {

$this->setOption('errorNo',$error);

return false;

}

$this->orgname = $name;

$this->size = $size;

$this->tmpfile = $tmpName;

$this->mime = $type;

//后缀没处理

$info = pathinfo($name);

$this->subfix = $info['extension'];

return true;

/*

$arr = explode('.',$name);

$this->subfix = array_pop($arr);

$arr = explode('.',$name);

$this->subfix = $arr[count($arr)-1];

$pos = strrpos($name,'.');

echo substr($name,$pos + 1);

*/

}

protected function checkPath()

{

//检测路径是否是目录,如果不存在创建

if (!is_dir($this->path)) {

return mkdir($this->path,0755,true);

}

//检测路径是否可写,如果不写写更改权限

if (!is_writeable($this->path) ||  !is_readable($this->path)) {

return chmod($this->path,0755);

}

return true;

}

protected function getErrorInfo()

{

switch ($this->errorno) {

case 1:

$str = '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';

break;

case 2:

$str = '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';

break;

case 3:

$str = '部份件被上传';

break;

case 4:

$str = '没有文件被上传';

break;

case 6:

$str = '找不到临时文件夹';

break;

case 7:

$str = '临时文件写入失败';

break;

case -1:

$str = '自定义的上传路径不存在';

break;

case -2:

$str = '没有权限';

break;

case -3:

case -4:

$str = '类型或后缀不准许';

break;

case -5:

$str = '超过了自定义的大小';

break;

case -6:

$str = '不是上传文件';

break;

case -7:

$str = '移动上传文件失败';

break;

}

return $str;

}

public function __get($key)

{

if (in_array($key, ['newpath','newname','errorno','size'])) {

return $this->$key;

} else if ($key == 'errorinfo') {

return $this->getErrorInfo();

}

}

}

//调用:

$upload = new Upload();

$result = $upload->uploadFile('f');

var_dump($result);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值