文件上传-单个文件
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;
}
}
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;
}
}
相关文章推荐
- Linux远程登录
- 细说ASP.NET Core与OWIN的关系
- 微软发布正式版SQL Server 2016
- 团队第二次冲刺10
- 汇编指令
- 游戏粉丝的福音
- mybatis 批量插入 list<object> in oracle
- ubuntu解压rar格式文件
- 购买图书
- [leetcode] 141. Linked List Cycle
- CC2530之DHT11温湿度测量
- 猎头顾问那些年,那些奇葩候选人——北漂18年(58)
- 继承
- VS2012
- [leetcode] 202. Happy Number
- 古典小说网打造的 卡拉OK 阅读体验
- Live Migrate 操作 - 每天5分钟玩转 OpenStack(42)
- Live Migrate 操作 - 每天5分钟玩转 OpenStack(42)
- Live Migrate 操作 - 每天5分钟玩转 OpenStack(42)
- 51CTO大数据学习006--集合