您的位置:首页 > 其它

75. 面向对象文件上传

2015-12-19 15:08 274 查看
upload.class.php

<?php

class upload
{
protected $fileName;
protected $maxSize;
protected $allowMime;
protected $allowExt;
protected $uploadPath;
protected $imgFlag;
protected $fileInfo;
protected $error;
protected $ext;
protected $destination;
protected $uniName;

public function __construct($fileName='myfile',$uploadPath='./uploads',$imgFlag=true,$maxSize=5242880,$allowExt=array('jpeg','jpg','png'),$allowMime=array('image/jpeg','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()
{
if(!is_null($this->fileInfo)){

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{
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;
}
}

protected function showError()
{
exit('<span style="color:red">' . $this->error . '</span>');
}

protected function checkHTTPPost()
{
if(!is_uploaded_file($this->fileInfo['tmp_name'])){
$this->error = '文件不是通过HTTP POST 方式上传上来的';
return false;
}
return true;
}

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->checkExt() && $this->checkSize() && $this->checkMime() && $this->checkTrueImg() && $this->checkHTTPPost()){
$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 $this->destination;
}else{
$this->error = '文件移动失败';
$this->showError();
}
}else{
$this->showError();
}
}
}


upload.php

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>

<body>
<form action="doAction.php" method="post" enctype="multipart/form-data">
选择上传的文件<input type="file" name="myfile"/><br/>
输入:<input type="text" name="mytext"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>


doAction.php

<?php
header('content-type:text/html;charset=utf-8');

require_once 'upload.class.php';

$upload = new upload();

$dest = $upload->uploadFile();

var_dump($dest);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: