php写一个上传文件的类,一个php文件上传类

代码如下:

/**

* 文件上传类

* www.jbxue.com

* */

class UpFile{

private $filePath; //文件目的路径

private $fileField; //默认$_FILES[$fileField],通过$_FILES环境变量获取上传文件信息

private $originName; //源文件名

private $tmpFileName; //临时文件名

private $fileType; //文件类型

private $fileSize; //文件大小

private $newFileName; //新文件名

private $allowType=array('jpg','gif','png'); //

private $maxSize=2000000; //允许文件上传的最大度是2M

private $isUserDefName=false; //是否采用用户自定义名

private $userDefName; //用户定义名称

private $isRandName=true; //是否随机命名

private $randName; //系统随机名称

private $errorNum=0; //错误号

private $isCoverModer=true; //是否覆盖模式

function __construct($options=array()){

$this->setOptions($options); //设置上传时属性列表

}

function uploadFile($filefield){

$this->setOption('errorNum',0); //设置错误位

$this->setOption('fileField',$filefield); //设置fileField

$this->setFiles(); //设置文件信息

$this->checkValid(); //判断合法性

$this->checkFilePath(); //检查文件路径

$this->setNewFileName(); //设置新的文件名

if($this->errorNum<0)

return $this->errorNum;

return $this->copyFile(); //上传文件

}

private function setOptions($options=array()){

foreach ($options as $key=>$val){

if(!in_array($key,array('filePath','fileField','originName','allowType','maxSize','isUserDefName','userDefName','isRandName','randName')))

continue;

$this->setOption($key,$val);

}

}

private function setFiles(){

if($this->getFileErrorFromFILES!=0){

$this->setOptions('errorNum',-1);

return $this->errorNum;

}

$this->setOption('originName',$this->getFileNameFromFILES());

$this->setOption('tmpFileName',$this->getTmpFileNameFromFILES());

$this->setOption('fileType',$this->getFileTypeFromFILES());

$this->setOption('fileSize',$this->getFileSizeFromFILES());

}

private function setOption($key,$val){

$this->$key=$val;

}

private function setNewFileName(){

if($this->isRandName==false&&$this->isUserDefName==false){

$this->setOption('newFileName',$this->originName);

}elseif ($this->isRandName==true&&$this->isUserDefName=false){

$this->setOption('newFileName',$this->proRandName().'.'.$this->fileType);

}elseif ($this->isRandName==false&&$this->isUserDefName=true){

$this->setOption('newFileName',$this->userDefName);

}else {

$this->setOption('errorNum',-4);

}

}

private function checkValid(){

$this->checkFileSize();

$this->checkFileType();

}

private function checkFileType(){

if(!in_array($this->fileType,$this->allowType)){

$this->setOption('errorNum',-2);

}else {

return $this->errorNum;

}

}

private function checkFileSize(){

if($this->fileSize>$this->maxSize){

$this->setOption('errorNum',-3);

}else {

return $this->errorNum;

}

}

private function checkFilePath(){

if(!file_exists($this->filePath)){

if($this->isCoverModer){

$this->makePath();

}else {

$this->setOption('errorNum',-6);

}

}

}

private function proRandName(){

$tmpStr= "abcdefghijklmnopqrstuvwxyz0123456789";

$str="";

for ($i=0;$i<8;$i++){

$num=rand(0,strlen($tmpStr));

$str.=$tmpStr[$num];

}

return $str;

}

private function makePath(){

if(!@mkdir($this->filePath,0755)){

$this->setOption('errorNum',-7);

}

}

private function copyFile(){

$filePath=$this->filePath;

if($filePath[strlen($filePath)-1]!='/'){

$filePath.='/';

}

$filePath.=$this->newFileName;

if(!@move_uploaded_file($this->tmpFileName,$filePath)){

$this->setOption('errorNum',-5);

}

return $this->errorNum;

}

function getNewFileName(){

return $this->newFileName;

}

private function getFileErrorFromFILES(){

return $this->fileField['error'];

}

private function getFileTypeFromFILES(){

$str=$this->fileField['name'];

$aryStr=split("\.",$str); //将字符串分割到数组中

$ret=strtolower($aryStr[count($aryStr)-1]);

return $ret;

}

private function getFileNameFromFILES(){

return $this->fileField['name'];

}

private function getTmpFileNameFromFILES(){

return $this->fileField['tmp_name'];

}

private function getFileSizeFromFILES(){

return $this->fileField['size'];

}

public function getErrorMsg(){

$str="上传文件出错:";

switch ($this->errorNum){

case -1:

$str.="未知错误!";

break;

case -2:

$str.="未允许类型!";

break;

case -3:

$str.="文件过大!";

break;

case -4:

$str.="产生文件名出错!";

break;

case -5:

$str.="上传失败!";

break;

case -6:

$str.="目录不存在!";

break;

case -7:

$str.="建立目录失败!";

break;

}

return $str;

}

}

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值