• 技术文章 >后端开发 >php教程

    PHP实现文件上传 php文件上传插件 php多文件上传插件 php ftp上传文

    2016-07-29 08:55:01原创926
    工具类如下:

    maxSize = $maxSize;
    			$this->allowMime = $allowMime;
    			$this->allowExt = $allowExt;
    			$this->uploadPath = $uploadPath;
    			$this->imgFlag = $imgFlag;
    			$this->init();
    		}
    
    		private function init() {
    			$this->fileInfo = array();
    			foreach ($_FILES as $k => $v) {
    				$this->fileInfo = $v;
    			}
    			
    			if (!empty($this->fileInfo)) {
    				$this->ext = strtolower(pathinfo($this->fileInfo['name'], PATHINFO_EXTENSION));
    			}
    			
    		}
    
    		/**
    		* 上传文件
    		* @return 如果上传失败那么就返回false,如果上传成功,那么返回路径
    		*/
    		public function uploadFile() {
    			if (!$this->checkError() || !$this->checkSize() || !$this->checkHTTPPost() || !$this->checkTrueImg()) {
    				return false;
    			}
    			if (!empty($this->allowExt) && !$this->checkExt()) {
    				return false;
    			}
    			if (!empty($this->allowMime) && !$this->checkMime()) {
    				return false;
    			}
    			$this->checkUploadPath();
    			$this->uniName = $this->getUniName();
    			$this->destination = $this->uploadPath . '/' . $this->uniName . '.' . $this->ext;
    			if (!@move_uploaded_file($this->fileInfo['tmp_name'], $this->destination)) {
    				return false;
    			}
    			return $this->destination;
    		}
    
    		/**
    		* 获取错误信息
    		*/
    		public function getError() {
    			return $this->error;
    		}
    
    		/**
    		* 检测上传文件是否出错
    		* @return boolean
    		*/
    		private function checkError() {
    
    			if (empty($this->fileInfo)) {
    				$this->error = '文件上传出错';
    				$this->code = 1001;
    				return false;
    			}
    			
    			if ($this->fileInfo['error'] == 0) {
    				return true;
    			}
    
    			switch ($this->fileInfo['error']) {
    				case 1:
    					$this->error = '超过了PHP配置文件中upload_max_filesize选项的值';
    					$this->code = 1002;
    					break;
    				case 2:
    					$this->error = '超过了表单中MAX_FILE_SIZE设置的值';
    					$this->code = 1003;
    					break;
    				case 3:
    					$this->error = '文件部分被上传';
    					$this->code = 1004;
    					break;
    				case 4:
    					$this->error = '没有选择上传文件';
    					$this->code = 1005;
    					break;
    				case 6:
    					$this->error = '没有找到临时目录';
    					$this->code = 1006;
    					break;
    				case 7:
    					$this->error = '文件不可写';
    					$this->code = 1007;
    					break;
    				case 8:
    					$this->error = '由于PHP的扩展程序中断文件上传';
    					$this->code = 1008;
    					break;
    			}
    			return false;
    		}
    
    		/**
    		* 检测上传文件的大小
    		* @return boolean
    		*/
    		private function checkSize() {
    			if ($this->fileInfo['size'] > $this->maxSize) {
    				$this->error = '上传文件过大';
    				$this->code = 1009;
    				return false;
    			}
    			return true;
    		}
    
    		/**
    		* 检测扩展名
    		* @return boolean
    		*/
    		private function checkExt() {
    			if (!in_array($this->ext, $this->allowExt)) {
    				$this->error = '不允许的扩展名';
    				$this->code = 1010;
    				return false;
    			}
    			return true;
    		}
    
    		/**
    		* 检测文件类型
    		* @return boolean
    		*/
    		private function allowMime() {
    			if (!in_array($this->fileInfo['type'], $this->allowMime)) {
    				$this->error = '不允许的文件类型';
    				$this->code = 1011;
    				return false;
    			}
    			return true;
    		}
    
    		/**
    		* 检测是否是真实图片
    		* @return boolean
    		*/
    		private function checkTrueImg() {
    			if ($this->imgFlag) {
    				if (!@getimagesize($this->fileInfo['tmp_name'])) {
    					$this->error = '不是真实图片';
    					$this->code = 1012;
    					return false;
    				}
    				return true;
    			}
    			return true;
    		}
    
    		/**
    		* 检测是否通过HTTP POST方式上传的
    		* @return boolean
    		*/
    		private function checkHTTPPost() {
    			if (!is_uploaded_file($this->fileInfo['tmp_name'])) {
    				$this->error = '文件不是通过HTTP POST方式上传的';
    				$this->code = 1013;
    				return false;
    			}
    			return true;
    		}
    
    		/**
    		* 检测目录不存在,则创建
    		*/
    		private function checkUploadPath() {
    			if (!file_exists($this->uploadPath)) {
    				mkdir($this->uploadPath, 0777, true);
    			}
    		}
    
    		/**
    		* 产生唯一字符串
    		* @return string
    		*/
    		private function getUniName() {
    			return md5(uniqid(microtime(true), true));
    		}
    
    
    	}
     ?>

    使用方法如下:

    
    
    
    	
    	文件上传
    
    
    上传:

    uploadFile();
    	if (!($destination === false)) {
    		echo "$destination";
    	}
    	echo $uploadHelper->getError();
     ?>

    以上就介绍了PHP实现文件上传,包括了文件上传,php方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:文件上传 php
    上一篇:php 5619连接数据库 无法连接数据库 怎么连接数据库 plsql连接数据库 下一篇:nginx 动态加载(ngx_dso_module)模块 nginx ajp module nginx ssl module nginx kafka modul
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• PHP+LINUX怎么实现定时服务 • 有哪位高手会改.htaccess内容 • 急关于php返回xml信息的有关问题 • php验证session 报错了解决办法 • 求sql帖子随机调用有关问题
    1/1

    PHP中文网