PHP는 파일 업로드, PHP 파일 업로드 플러그인, PHP 다중 파일 업로드 플러그인, PHP FTP 업로드 파일을 구현합니다.

WBOY
풀어 주다: 2016-07-29 08:55:01
원래의
1670명이 탐색했습니다.

도구 카테고리는 다음과 같습니다.

<?php 
	class UploadHelper {
		//上传文件数组的名称
		private $fileName;
		//允许上传的最大值
		private $maxSize;
		//允许的上传类型
		private $allowMime;
		//文件扩展名
		private $allowExt;
		//上传文件到服务器的路径
		private $uploadPath;
		//是否只允许上传图片
		private $imgFlag;
		//上传文件信息
		private $fileInfo;
		//上传错误码,1为正确
		private $code = 1;
		//上传错误信息
		private $error = &#39;success&#39;;
		//文件扩展名
		private $ext;
		//上传文件的地址:路径+文件名
		private $destination;



		/**
		* 构造函数,这里面的参数都是默认的,在实际使用中,其实只需要指定一下
		* uploadPath上传路径和imgFlag是否限制只允许上传图片即可
		* @param $uploadPath 上传到服务器的路径
		* @param $imgFlag 是否限制只允许上传图片
		* @param $maxSize 允许上传的最大值
		* @param $allowExt 允许上传文件的后缀名
		* @param $allowMime 允许上传文件的类型
		*/
		public function __construct($uploadPath=&#39;./uploads&#39;, $imgFlag = true,
			$maxSize=5242880, $allowExt=&#39;&#39;/*array(&#39;jpeg&#39;, &#39;jpg&#39;, &#39;png&#39;, &#39;gif&#39;)*/, 
			$allowMime=&#39;&#39;/*array(&#39;image/jpeg&#39;, &#39;image/png&#39;, &#39;image/gif&#39;)*/) {

			$this->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));
		}


	}
 ?>
로그인 후 복사

사용 방법은 다음과 같습니다.

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>文件上传</title>
</head>
<body>
	<form action="uploadHelperTest.php" method="post" enctype="multipart/form-data">
		上传:
		<input type="file" name="myFile" /><br/>
		<input type="submit" value="上传">
	</form>
</body>
</html>
로그인 후 복사

<?php 
	header(&#39;content-type:text/html; charset=utf-8&#39;);
	require_once &#39;UploadHelper.class.php&#39;;

	$uploadHelper = new UploadHelper(&#39;./test&#39;, false);
	$destination = $uploadHelper->uploadFile();
	if (!($destination === false)) {
		echo "$destination";
	}
	echo $uploadHelper->getError();
 ?>
로그인 후 복사

위 내용은 파일 업로드와 PHP 콘텐츠를 포함하여 PHP에서의 파일 업로드 구현을 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!