`
dcj3sjt126com
  • 浏览: 1876939 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP上传类实现上传

    博客分类:
  • PHP
 
阅读更多

<?php


//$array=array('path'=>'d:/','allowsize'=>4000000);

//$t=new upload($array);


class upload{
	//路径
	private $path='./';
	//文件准许的MIME类型
	private $allowmime=array('image/jpeg','image/jpg','image/gif','image/pjpeg','image/png','image/x-png','image/wbmp');
	//文件准许的后缀
	private $allowsub=array('jpg','jpeg','gif','png','bmp');
	//文件准许的大小
	private $allowsize=2000000;
	//文件的错误号
	private $errorNum;
	//文件的错误信息
	private $errorInfo;
	//文件的原名
	private $orgname;
	//文件的新名
	private $newname;
	//是否启用随机文件名
	private $israndname=true;
	//文件的大小
	private $size;
	//文件的后缀
	private $subfix;
	//文件的前缀
	private $prefix='up_';
	//文件类型
	private $type;
	//临时文件路径
	private $tmpname;


	//构造方法初使化成员属性


	

	public function __construct($array=array()){

		foreach($array as $key=>$value){
			
			$key=strtolower($key);

			if(!array_key_exists($key,get_class_vars(get_class($this)))){
				continue;
			}
			$this->setOption($key,$value);
		}
	}


	public function setOption($key,$value){
		$this->$key=$value;
	}

	public function up($field){

	
		//检测路径是否正确
		if(!$this->checkPath()){
			return false;
		}
		
		//把传进来的值都赋值给临时变量

		$name=$_FILES[$field]['name'];
		$size=$_FILES[$field]['size'];
		$tmpname=$_FILES[$field]['tmp_name'];
		$error=$_FILES[$field]['error'];
		$type=$_FILES[$field]['type'];

	
		//把传进来的参数交给setFiles来设置一批信息
		if($this->setFiles($name,$size,$tmpname,$error,$type)){
		
		//判断大小,判断MIME,判断后缀
			if($this->checkSize()&&$this->checkMime()&&$this->checkSub()){
				$this->newname=$this->randname();

				echo 11111111111;	
				if($this->move()){
					return $this->newname;
				}else{
					return false;
				}
				
			}else{

		
					return false;
			}	

	
		//是否启用随机文件名
		//
		//移动文件

		}else{
			return false;
		}
		
	}

	private function move(){

			if(is_uploaded_file($this->tmpname)){
				$this->path=$this->path.$this->newname;
				if(move_uploaded_file($this->tmpname,$this->path)){
					return true;
				}else{
					$this->setOption('errorNum',-7);
					return false;
				}

			}else{
				$this->setOption('errorNum',-6);
				return false;
			}
	}

	private function randname(){
		if($this->israndname){
			
			return $this->prefix.$this->createNewName();
		}else{
			return $this->prefix.$this->orgname;
		}

	}

	private function createNewName(){
			
		return uniqid().'.'.$this->subfix;

	}	

	private function checkSub(){
		if(in_array($this->subfix,$this->allowsub)){

			return true;
		}else{
			$this->setOption('errorNum',-5);
			return false;
		}

	}

	private function checkMime(){
		if(in_array($this->type,$this->allowmime)){
			return true;
		}else{
			$this->setOption('errorNum',-4);
			return false;
		}
	}
 
	private function checkSize(){
		if($this->size>$this->allowsize){
			$this->setOption('errorNum',-3);
			return false;
		}else{
			return true;
		}

	}

	private function setFiles($name,$size,$tmpname,$error,$type){
		if(!empty($error)){
			$this->setOption('errorNum',$error);
			return false;		
		}

		$this->orgname=$name;
		$this->size=$size;
		$this->tmpname=$tmpname;
		$this->type=$type;
		$arr=explode('.',$name);
		$this->subfix=array_pop($arr);
		//$this->subfix=$arr[count($arr)-1];
		return true;	
	}


	public function checkPath(){

		if(empty($this->path)){
			$this->setOption('errorNum',-1);
			//$this->errorNum=-1
			return false;
		}else{
			$this->path=rtrim($this->path,'/').'/';
			if(file_exists($this->path)&&is_writeable($this->path)){

					return true;
			}else{
				if(mkdir($this->path,0777,true)){

					return true;
				}else{
					$this->setOption('errorNum',-2);
					return false;
				}

			}

		}
		

	}

	private function getErrorNum(){

		switch($this->errorNum){
			case -1:
				$str='文件路径不存在';
				break;
			case -2:
				$str='文件夹创建失败';
				break;
			case -3:
				$str='文件大小超出了手动指定的大小';
				break;
			case -4:
				$str='文件类型不准许';
				break;
			case -5:
				$str='文件后缀不准许';
				break;
			case -6:
				$str='文件不是上传文件';
				break;
			case -7:
				$str='文件移动失败';
				break;
			case 1:
				$str='文件大小超过了php.ini当中设置maxsize准许的值';
				break;
			case 2:
				$str='超过了表单当中设置的最准许的最大值';
				break;
			case 3:
				$str='只有部份文件被上传';
				break;
			case 4:
				$str='没有文件被上传';
				break;
			case 6:
				$str='找不到临时文件夹';
				break;
			case 7:
				$str='临时文件写入失败';
				break;
		}
		return $str;
	}

	public function __get($proName){

		if($proName=='errorInfo'){
			return $this->getErrorNum();
		}
	}


}

$t=new upload();


?>
 
分享到:
评论

相关推荐

    PHP文件上传类

    为了简化这个过程,开发者通常会编写一个专门的文件上传类,以实现对上传过程的全面控制和错误处理。以下是对"PHP文件上传类"的详细解析: 1. **类的结构**: - 一个PHP文件上传类通常包含一系列的方法,如`upload...

    简单php上传类,实现两步上传

    很简单的php单文件上传类,自个写着玩的. 实现两步上传文件.

    php文件上传类

    然而,在实际项目中,我们通常会创建一个自定义的PHP文件上传类,以实现更灵活、更安全的文件上传管理。 这个"php文件上传类"应该具备以下关键功能和特性: 1. **设置上传限制**:首先,类应允许开发者定义上传...

    强大的php文件上传类强大的php文件上传类

    三、实现强大的PHP文件上传类 一个简单的示例类可能包含以下方法: 1. `validateFile()`:验证文件大小、类型等。 2. `renameFile()`:生成唯一的文件名。 3. `moveFile()`:将文件从临时位置移动到目标位置。 4. ...

    php图片上传类.zip

    本资源提供了一个PHP图片上传类,旨在简化这一过程并处理与之相关的各种问题。下面将详细介绍这个PHP图片上传类及其可能涉及的知识点。 1. **文件上传基础知识** PHP中的文件上传主要依赖于`$_FILES`全局数组,它...

    PHP实现文件上传附件

    PHP实现文件上传PHP实现文件上传PHP实现文件上传PHP实现文件上传PHP实现文件上传PHP实现文件上传PHP实现文件上传PHP实现文件上传PHP实现文件上传PHP实现文件上传PHP实现文件上传PHP实现文件上传PHP实现文件上传PHP...

    php实现大文件上传带进度条

    以上就是一个使用PHP和APC扩展实现大文件上传带进度条的基本流程。通过这种方法,我们可以避免一次性加载大文件,分块上传降低了服务器内存压力,同时也提供了良好的用户体验,用户可以看到文件上传的实时进度。需要...

    php批量上传类(原创)

    本篇文章将深入探讨如何使用PHP实现一个批量上传类,以及相关的关键知识点。 首先,我们要理解批量上传的基本概念。批量上传是指允许用户一次选择多个文件进行上传,而不是逐个选择。这大大提高了用户的效率,尤其...

    php-upload封装类上传文件,多单文件上传.zip

    2. **封装PHP上传类**:`upload_class.php`是这个封装类的核心。它通常会包含一系列用于验证、移动上传文件的方法,如检查文件类型、大小限制,以及将临时文件移动到指定目录。封装类的好处在于代码复用,提高开发...

    php多文件上传类.zip

    "php多文件上传类.zip" 提供了一个专为处理这种需求设计的类库,它允许用户同时上传多个文件,提高了工作效率,简化了代码实现。下面将详细介绍这个多文件上传类的主要功能和使用方法。 1. **类库简介** 这个多...

    PHP实现通过CURL上传文件功能示例

    本文实例讲述了PHP实现通过CURL上传文件功能。分享给大家供大家参考,具体如下: PHP使用CURL上传文件只需发送一个POST请求就可以了,在请求中设置某个字段为需要上传的文件全路径,并且以”@”开头,然后使用CURL把...

    php 实现多文件上传类(txt)

    ### PHP实现多文件上传类详解 #### 一、概述 在Web开发中,文件上传是一项常见功能,尤其在用户需要提交图片、文档等资源时。本文档将详细解析一个基于PHP的经典多文件上传类——`myFrame_Upload`。该类不仅支持...

    php实现文件上传

    **二、处理PHP上传** 在服务器端,我们需要一个PHP脚本来接收并处理上传的文件。以下是一个基本的PHP文件上传处理示例: ```php &lt;?php if(isset($_FILES['userfile']) && $_FILES['userfile']['error'] === UPLOAD...

    自编PHP多图片上传类

    9. **源码结构**:一个良好的PHP上传类应该遵循良好的编程实践,如封装、面向对象编程(OOP),使用类和方法组织代码,以及适当的注释。 10. **类设计**:类可能包含初始化方法(构造函数)用于设置默认参数,如上...

    PHP实现的多文件上传类及用法示例

    本文介绍了一个PHP实现的多文件上传类,这个类封装了多文件上传的相关操作,简化了多文件上传的处理流程。 #### 文件上传的实现机制 文件上传通过HTML表单中的`&lt;input type="file"&gt;`元素来实现。当用户选择文件后,...

    php实现多文件上传

    在PHP中实现多文件上传是一项常见的任务,尤其在开发web应用程序时。这个功能允许用户一次选择并上传多个文件,如图片、文档等。以下是对如何实现这一功能的详细讲解: 一、HTML表单设计 首先,你需要在HTML页面中...

    PHP文件上传类,PHP文件上传类

    这个"PHP文件上传类"就是这样一个工具,它对PHP的文件上传功能进行了封装,使得开发者只需简单设置参数即可实现文件上传。 1. **文件上传基础** - PHP中的文件上传是通过`$_FILES`全局数组来处理的,它包含了关于...

    多文件上传类

    在给定的代码中,定义了一个名为`Upload`的类,这个类专门用于实现多文件上传并支持生成缩略图的功能。以下是这个类中包含的关键知识点: 1. **变量定义**:`Upload`类中定义了若干属性来存储上传过程中的关键信息...

    PHP多文件上传类,支持单个和多个文件上传

    这个PHP上传类的主要功能包括: 1. **错误处理**:类中包含了对各种可能的上传错误进行检查和处理的机制,例如文件过大、文件类型不符等。这使得开发者可以更好地控制上传流程,避免因错误导致的程序中断。 2. **...

    比较全面的php文件上传类.zip

    这个"比较全面的php文件上传类"是一个专门处理文件上传的工具,它封装了相关操作,提供了更方便、安全的方式来处理文件上传过程。下面将详细讲解这个类库的核心知识点及其在实际开发中的应用。 首先,类库的设计...

Global site tag (gtag.js) - Google Analytics