<?php
class Upload{
protected $path='./upload/';//文件上傳保存路徑
protected $allowSuffix = ['jpg','jpeg','gif','png','wbmp']; //允許的后綴
protected $allowMime = ['image/jpeg','image/png','image/wbmp','image/gif'];
protected $maxSize =2000000;//允許文件大小
protected $isRandName = true;//是否啟動隨機名
protected $prefix = 'up_'; //文件前綴
//錯誤號碼錯誤信息
protected $errorNumber;
protected $errorInfo;
//文件信息
protected $oldName;//文件名
protected $suffix;//文件的后綴
protected $size;//文件的大小
protected $mime;
protected $tmpName;//臨時文件的路徑
protected $newName ;//文件新名字
public function __construct($arr=[]){
foreach ($arr as $key => $value) {
$this->setOption($key,$value);
}
}
//判斷這個$key是不是成員屬性拟枚,如果是蜀撑,則設(shè)置
protected function setOption($key,$value){
//得到所有的成員屬性
$keys = array_keys(get_class_vars(__CLASS__));
//如果$key是成員屬性属韧,那么設(shè)置
if(in_array($key, $keys)){
$this->$key = $value;
}
}
//文件上傳函數(shù)
//$key 就是input框中的name屬性值
public function uploadFile($key){
//判斷有沒有設(shè)置路徑 path
if(empty($this->path)){
$this->setOption('errorNumber',-1);
return false;
}
//判斷該目錄是否存在楼镐,是否可寫
if(!$this->check()){
$this->setOption('errorNumber',-2);
return false;
}
//判斷$_FILES里面的error信息是否為0
$error = $_FILES[$key]['error'];
if($error){
$this->setOption('errorNumber',$error);
return false;
}else{
//提取文件相關(guān)信息并且保存成員屬性
$this->getFileInfo($key);
}
//判斷文件的大小忿族、mime扼劈、后綴是否符合
if(!$this->checkSize() || !$this->checkMime() || !$this->checkSuffix()){
return false;
}
//得到新的文件名字
$this->newName = $this->createNewName();
//判斷是否是上傳文件驻啤,并且移動上傳文件
if(is_uploaded_file($this->tmpName)){
if(move_uploaded_file($this->tmpName, $this->path.$this->newName)){
return $this->path.$this->newName;
}else{
$this->setOption('errorNumber',-7);
}
}else{
$this->setOption('errorNumber',-6);
return false;
}
}
//得到文件的新名字
protected function createNewName(){
if($this->isRandName){
$name = $this->prefix.uniqid().'.'.$this->suffix;
}else{
$name = $this->prefix.$this->oldName;
}
return $name;
}
protected function check(){
//文件夾不存在或者不是目錄,創(chuàng)建文件夾
if(!file_exists($this->path) || !is_dir($this->path)){
return mkdir($this->path,0777,true);
}
//判斷是否可寫
if(!is_writeable($this->path)){
return chmod($this->path, 0777);
}
return true;
}
protected function getFileInfo($key){
//得到文件名字
$this->oldName = $_FILES[$key]['name'];
//得到文件的mime類型
$this->mime = $_FILES[$key]['type'];
//得到文件臨時路徑
$this->tmpName = $_FILES[$key]['tmp_name'];
//得到文件大小
$this->size = $_FILES[$key]['size'];
//得到文件后綴
$this->suffix = pathinfo($this->oldName)['extension'];
}
protected function checkSize(){
if($this->size > $this->maxSize){
$this->setOption('errorNumber',-3);
return false;
}
return true;
}
protected function checkMime(){
if(!in_array($this->mime,$this->allowMime)){
$this->setOption('errorNumber',-4);
return false;
}
return true;
}
protected function checksuffix(){
if(!in_array($this->suffix, $this->allowSuffix)){
$this->setOption('errorNumber',-5);
return false;
}
return true;
}
public function __get($name){
if($name == 'errorNumber'){
return $this->errorNumber;
}else if($name == 'errorInfo'){
return $this->getErrorInfo();
}
}
protected function getErrorInfo(){
switch ($this->errorNumber) {
case -1:
$str = '文件路徑?jīng)]有設(shè)置';
break;
case -2:
$str = '文件路徑不是目錄或者沒有權(quán)限';
break;
case -3:
$str = '文件大小超過指定范圍';
break;
case -4:
$str = '文件MIME不符合';
break;
case -5:
$str = '文件后綴名不符合';
break;
case -6:
$str = '不是上傳文件';
break;
case -7:
$str = '文件上傳失敗';
break;
case 1:
$str = '超出php.ini設(shè)置大小';
break;
case 2:
$str = '超出html表單大小';
break;
case 3:
$str = '文件只有部分上傳';
break;
case 4:
$str = '沒有文件上傳';
break;
case 6:
$str = '找不到臨時文件';
break;
case 7:
$str = '文件寫入失敗';
break;
}
return $str;
}
}
封裝上傳類
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門良风,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人闷供,你說我怎么就攤上這事烟央。” “怎么了歪脏?”我有些...
- 文/不壞的土叔 我叫張陵疑俭,是天一觀的道長。 經(jīng)常有香客問我婿失,道長钞艇,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任豪硅,我火速辦了婚禮哩照,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘懒浮。我一直安慰自己飘弧,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著次伶,像睡著了一般蹋岩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上学少,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吓蘑!你這毒婦竟也來了惕虑?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布鞭衩,位于F島的核電站,受9級特大地震影響攒射,放射性物質(zhì)發(fā)生泄漏醋旦。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一会放、第九天 我趴在偏房一處隱蔽的房頂上張望饲齐。 院中可真熱鬧,春花似錦咧最、人聲如沸捂人。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽滥搭。三九已至酸纲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瑟匆,已是汗流浹背闽坡。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 下面是源碼.h文件 import "XMWUploadManager.h" import "TXYUploadMa...
- 老大讓封裝一個新的上傳類渐扮,目前公司用的是七牛的云存儲论悴,就基于七牛sdk封裝了一個,上代碼墓律。 七牛sdk要使用到AF...
- 因為項目要使用到七牛云保存資源文件,所以就自己整理了一個七牛云的上傳工具類方便以后的開發(fā)和使用,希望能幫到大家!
- 文/ZYRzyr原文鏈接:http://www.reibang.com/p/c66d50cd14ee 閱讀建議:本...