求助,我是按照视频讲解一步步敲打的代码,怎么还是出错

来源:-

Dream7115

2014-11-19 14:55

1、upload.php页面代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>

<body>
<form action="doaction_new.php" method="post" enctype="multipart/form-data">
请选择要上传的文件:
<input type="file" name="myFile"/>
<input type="submit" value="上传文件"/>
</form>
</body>
</html>

2、doaction_new.php页面的代码

<?php
header('content-type:text/html;charset=gb2312');
require_once 'upload.class.php';
//print_r($_FILES);exit;
$upload=new upload();
$dest=$upload->uploadFile();
echo $dest;
3、upload.class.php页面的代码
<?php
class upload{
	protected $fileName;
	protected $maxSize;
	protected $allowMime;
	protected $allowExt;
	protected $uploadPath;
	protected $imgFlag;
	protected $fileInfo;
	protected $error;
	protected $ext;
	
	public function __construct($fileName='myFile',$uploadPath='./uploads',$imgFlag=true,$maxSize=5242880,$allowExt=array('jpeg','jpg','png','gif','bmp'),$allowMime=array('image/pjpeg','image/jpeg','image/jpg','image/png','image/gif')){

		$this->fileName=$fileName;
		$this->maxSize=$maxSize;
		$this->allowMime=$allowMime;
		$this->allowExt=$allowExt;
		$this->uploadPath=$uploadPath;
		$this->imgFlag=$imgFlag;
		$this->fileInfo=$_FILES[$this->fileName];		
	}
	/**检测上传文件是否有错**/
	protected function checkError(){
		//var_dump($this->fileInfo);exit;
		//print_r($this->fileInfo);exit;
		if(!is_null($this->fileInfo)){
		if($this->fileInfo['error']>0){
		var_dump($this->fileInfo);exit;
		if($this->fileInfo['error']>0){
			switch($this->fileInfo['error']){
				case 1;
				   $this->error='超过了PHP配置文件中upload_max_filesize选项的值';
				   break;
				case 2;
				   $this->error='超过了表单中Max_file_size设置的值';
				   break;
				case 3;
				   $this->error='文件部分被上传';
				   break;
				case 4;
				   $this->error='没有选择上传文件';
				   break;
				case 6;
				   $this->error='没有找到临时目录';
				   break;
				case 7;
				   $this->error='文件不可写';
				   break;
				case 8;
				   $this->error='由于PHP的扩展程序中断上传';
				   break;
		}
		return false;
		}else{
			echo aa;
		     return true;
		     }
	   }else{
	 	$this->error='文件上传出错';
	 	return false;
     }
	}
	
	/**检查上传文件的大小**/
	protected function checkSize(){
		if($this->fileInfo['size']>$this->maxSize){
			$this->error='上传文件过大';
			return false;
		}
		return true;
	}
	/**检测扩展名**/
	protected function checkExt(){
		$this->ext=strtolower(pathinfo($this->fileInfo['name'],PATHINFO_EXTENSION));
		if(!in_array($this->ext,$this->allowExt)){
			$this->error='不允许的扩展名';
			return false;
		}
		return true;
		}
		/**检测文件的类型**/
	protected function checkMime(){
	    if(!in_array($this->fileInfo['type'],$this->allowMime)){
		$this->error='不允许的文件类型';
		return false;
		}
		return true;	
		}

		/**检测是否是真实图片**/
	protected function checkTrueImg(){
	    if($this->imgFlag){
			if(!@getimagesize($this->fileInfo['tmp_name'])){
			$this->error='不是真实的照片';
			return false;
			}
			return true;	
			}
	}
		/**检测是否通过HTTPPost方式上传**/
	protected function checkHTTPPost(){
	    if(!is_uploaded_file($this->fileInfo['tmp_name'])){
			$this->error='文件不是通过HTTPPost方式上传的';
			return false;
			}
			return true;	
			}
		
	/**显示错误**/
	protected function showError(){
	  exit('<sapn style="color:red">'.$this->error.'</span>');	
	}
	/**检测目录不存在则创建**/
	protected function checkUploadPath(){
		if(!file_exists($this->uploadPath)){
			mkdir($this->uploadPath,0777,true);
		}
	}
	/**产生唯一字符串当做文件名**/
	protected function getUniName(){
		return md5(uniqid(microtime(true),true));
	}
	/**上传文件**/
	public function uploadFile(){
		if($this->checkError()&&$this->checkSize()&&$this->checkExt()&&$this->checkMime()&&$this->checkTrueImg()&&$this->checkHTTPPost()){
		$this->checkUploadPath();
		$this->uniName=$this->getUniName();
		$this->destination=$this->uploadPath.'/'.$this->uniName.'.'.$this->ext;
		if(@move_upload_file($this->fileInfo['tmp_name'],$this->destination)){
			return $this->destination;
		}else{
				$this->error='文件移动失败';
				$this->showError();
			}
		}else{
			$this->showError();
	    }
	}
}


写回答 关注

2回答

  • King
    2014-11-19 17:35:22

    对,这个你需要调试,看看到底是哪部出错啦,调试也是进步的过程

    ^-^...

  • lmmusus
    2014-11-19 15:45:47

    其实有时候肯定是你自己太粗心的问题嘛~~~~我也很多时候是这样子的呢~

    没关系,慢慢找哈~

PHP实现文件上传与下载

本课程讲解了文件上传的原理和配置,学会两种方式实现文件上传与下载

43735 学习 · 328 问题

查看课程

相似问题