您的位置:首页 > 其它

文件上传-单个文件

2016-06-03 07:27 190 查看
<?php
class FileUpload{
private $orignName;//原始文件名字
private $tmpFileName;//临时文件的名称
private $fileType;//文件类型
private $fileSize;//文件大小
private $newFileName;//新文件名称
private $errorNumber=0;//错误号,默认没错误
private $errorMess="";//用来提供错误报告
private $filepath;//指定上传的文件的保存路径
private $allowtype=array('gif','jpg','png','jpeg','cpp');//允许上传的文件类型
private $maxsize=1000000;//文件上传的最大大小
private $israndname=true;//是否使用随机文件名
/*构造方法
1:指定路径,2允许的类型 3 限制大小 4 是否使用随机文件
*/
function __construct($options=array()){
foreach($options as $key=>$val){
$key=strtolower($key);//全部转化为小写
if(!in_array($key,get_class_vars(get_class($this)))){
continue;
}else{
$this->setOption($key,$val);
}
}

}
private function setOption($key,$value){
$this->$key=$value;
}
private function getError(){
$str="上传文件 {$this->orignName} 出错!";
switch($this->errorNumber){
case 4:$str.=" 没有文件上传!";break;
case 3:$str.=" 文件只被部分上传";break;
case 2:$str.=" 文件上传上传超过HTML指定大小!";break;
case 1:$str.=" 上传文件超过了php.ini中的最大值!";break;
case -2:$str.=" 上传文件超过了{$this->maxsize} 的值!";break;
case -1:$str.=" 文件上传不在允许上传范围之类";break;
case -3:$str.=" 文件上传失败";break;
case -4:$str.=" 文件目录创建失败! ";break;
case -5:$str.=" 文件上传必须指定路径! ";break;
default :$str.=" 未知错误!";break;
}
return $str."<br>";
}
/*用来检查文件上传路径*/
private function checkFilePath(){

if(empty($this->filepath)){
$this->setOption('errorNumber',-5);
return false;
}
if(!file_exists($this->filepath)||!is_writeable($this->filepath)){
if(!@mkdir($this->filepath,0755)){
$this->setOption('errorNumber',-4);
return false;
}
}
return true;
}
/*用于检查文件上传类型*/
private function checkFileType(){
if(in_array(strtolower($this->fileType), $this->allowtype)){
return true;
}else{
$this->setOption('errorNumber',-1);
return false;
}
}
/*
用来检查文件上传的大小
*/
private function checkFileSize(){
if($this->fileSize>$this->maxsize){
$this->setOption("errorNumber",-2);
return false;
}else{
return true;
}
}
/*用来上传文件*/
function uploadFile($fileField){
/*检查文件上传路径*/
$return=true;//用于判断是否返回成功
if(!$this->checkFilePath()){
$this->errorMess=$this->getError();
return false;
}
$name=$_FILES[$fileField]['name'];
$tem_name=$_FILES[$fileField]['tmp_name'];
$size=$_FILES[$fileField]['size'];
$error=$_FILES[$fileField]['error'];
if($this->setFiles($name,$tem_name,$size,$error)){
/*检查文件尺寸*/
if($this->checkFileSize()&&$this->checkFileType()){
$this->setNewFileName();
if($this->CopyFile()){
return true;
}else{
return false;
}
}else{
$this->errorMess=$this->getError();
$return=false;
}
}else{
$return=false;
}
return $return;
}
private function setFiles($name="",$tem_name="",$size=0,$error=0){
$this->setOption('errorNumber',$error);
if($error){
$this->errorMess=$this->getError();
return false;
}
$arrData=explode('.',$name);//返回一个数组
$this->setOption('fileType',strtolower($arrData[count($arrData)-1]));
$this->setOption('orignName',$name);
$this->setOption('tmpFileName',$tem_name);
$this->setOption('fileSize',$size);
return true;
}

/*设置随机文件名*/
private function proRandName(){
$filename=date("YmdHis").rand(100,999);
return $filename.'.'.$this->fileType;
}
/*设置新的文件名*/
private function setNewFileName(){
if($this->israndname){
$this->setOption('newFileName',$this->proRandName());
}else{
$this->setOption('newFileName',$this->orignName);
}
}
/*拷贝文件*/
private function CopyFile(){
if(!$this->errorNumber){
$filepath=rtrim($this->filepath,'/').'/';
$filepath.=$this->newFileName;
if(@move_uploaded_file($this->tmpFileName, $filepath)){
return true;
}else{
$this->setOption('errorNumber',-3);
$this->errorMess=$this->getError();
return false;
}
}
}
/*用于上传文件后获取新的文件名*/
function getNewFileName(){
return $this->newFileName;
}
/*得到上传失败的原因*/
function getErrorMsg(){
return $this->errorMess;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: