青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 87  文章 - 279  trackbacks - 0
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

潛心看書研究!

常用鏈接

留言簿(19)

隨筆分類(81)

文章分類(89)

相冊

ACM OJ

My friends

搜索

  •  

積分與排名

  • 積分 - 220431
  • 排名 - 118

最新評論

閱讀排行榜

評論排行榜

今天做面試題,有一個文件上傳的,發覺以前做項目為了趕時間都是直接用別人的上傳類,交筆試題,怎么也不能用別人的吧,所以就寫了一個,可能很多bug,沒實際項目測試過,呵呵

<?php

/**
 * 文件上傳類
 * 成員變量帶*號必須要初始化
 * @version 1.0
 * @author howeey
 
*/
class FileUpload {
    
    
var $filePath//* 文件目的路徑
    
    
var $fileField//* 默認$_FILES[$fileField],通過$_FILES環境變量獲取上傳文件信息
    
    
var $originName//源文件名
    
    
var $tmpFileName//臨時文件名
    
    
var $fileType//文件類型(文件后綴)
    
    
var $fileSize//文件大小
    
    
var $newFileName//新文件名
    
    
var $allowType = array('txt','jpg','doc'); //允許上傳的文件類型
    
    
var $maxSize = 2048//允許文件上次的最大長度

    
var $isUserDefName = false//是否采用用戶自定義名
    
    
var $userDefName//用戶定義名稱
    
    
var $isRandName = true//是否隨機重命名
    
    
var $randName//系統隨機名稱
    
    
var $errorNum = 0//錯誤號
    
    
var $isCoverModer = true//是否覆蓋模式
    
    
var $debug = false//是否debug
    
    
function FileUpload($options = array()) {
        
//設置構造屬性列表
        $this->setOptions($options);
    }
    
    
function uploadFile($filefield, $options = array()) {
        
//設置錯誤位
        $this->setOption('errorNum',0);
        
//設置fileField
        $this->setOption('fileField', $filefield);
        
//設置上傳時屬性列表
        $this->setOptions($options);
        
//設置文件信息
        $this->setFiles();
        
//判斷合法性
        $this->checkValid();
        
//檢查文件路徑
        $this->checkFilePath();
        
//設置新文件名
        $this->setNewFileName();
        
//檢查是否出錯
        if ($this->errorNum < 0return $this->errorNum;
        
//上傳文件
        return $this->copyFile();
    }
    
    
/**
     * 設置成員變量列表
     *
     * @param unknown_type $options
     
*/
    
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);
        }
    }
    
    
/**
     * 設置文件信息
     *
     
*/
    
function setFiles() {
        
if ($this->getFileErrorFromFILES() != 0) {
            
$this->setOptions('errorNum', -1);
            
return ;
        }
        
$this->setOption('originName', $this->getFileNameFromFILES());
        
$this->setOption('tmpFileName', $this->getTmpFileNameFromFILES());
        
$this->setOption('fileType', $this->getFileTypeFromFILES());
        
$this->setOption('fileSize', $this->getFileSizeFromFILES());
    }
    
    
/**
     * 設置某個成員變量
     *
     * @param unknown_type $key
     * @param unknown_type $val
     
*/
    
function setOption($key, $val) {
        
$this->$key = $val;
        
if ($this->debug) {
            
echo '成員變量 '.$key.' 被設置成 '.$val.'<br>';
        }
    }
    
    
/**
     * 設置新的文件名(根據isRandName,isUserDefName標志分3種新文件名,隨機文件名,用戶自定義文件名,源文件名)
     *
     
*/
    
function setNewFileName() {
        
if ($this->isRandName == false && $this->isUserDefName == false) {
            
//新文件名和原來文件名相同
            $this->setOption('newFileName', $this->originName);
        } 
else if ($this->isRandName == true && $this->isUserDefName == false) {
            
//產生隨機文件名
            $this->setOption('newFileName', $this->proRandName().'.'.$this->fileType);
        } 
else if ($this->isRandName == false && $this->isUserDefName == true) {
            
//產生用戶自定義用戶名
            $this->setOption('newFileName', $this->userDefName);
        } 
else {
            
$this->setOption('errorNum', -4);
        }
    }
    
    
/**
     * 判斷上傳文件的合法性
     *
     
*/
    
function checkValid() {
        
//判斷文件大小
        $this->checkFileSize();
        
//判斷文件類型
        $this->checkFileType();
    }
    
    
/**
     * 檢查文件類型
     *
     
*/
    
function checkFileType() {
        
if (!in_array($this->fileType, $this->allowType)) $this->setOption('errorNum', -2);
        
return $this->errorNum;
    }
    
    
/**
     * 判斷文件大小
     *
     
*/
    
function checkFileSize() {
        
if ($this->fileSize > $this->maxSize) $this->setOption('errorNum', -3);
        
return $this->errorNum;
    }
    
    
/**
     * 判斷文件路徑
     *
     
*/
    
function checkFilePath() {
        
if (!file_exists($this->filePath)) {
            
if ($this->isCoverModer) {
                
//如果是覆蓋模式,建立路徑
                $this->makePath();
            } 
else {
                
$this->setOption('errorNum', -6);
            }
        }
    }
    
    
/**
     * 產生隨機文件名
     *
     
*/
    
function proRandName() {
        
$tmpStr = "abcdefghijklmnopqrstuvwxyz0123456789";
        
srand((double)microtime()*1000000);
        
$str = "";
        
for ($i=0$i<8$i++) {
            
$num = rand(0, strlen($tmpStr));
            
$str .= $tmpStr[$num];
        }    
        
return $str;
    }
    
    
/**
     * 建立文件路徑
     *
     
*/
    
function makePath() {
        
if (!@mkdir($this->filePath, 0755)) {
            
$this->setOption('errorNum', -7);
        }
    }
    
    
/**
     * 拷貝文件到指定目錄
     *
     * @return unknown
     
*/
    
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;
    }
    
    
/**
     * 從環境變量$_FILES獲取文件錯誤
     *
     
*/
    
function getFileErrorFromFILES() {
        
return $_FILES[$this->fileField]['error'];
    }
    
    
/**
     * 從環境變量$_FILES獲取文件類型
     *
     
*/
    
function getFileTypeFromFILES() {
        
$str = $_FILES[$this->fileField]['name'];
        
$aryStr = split("\.", $str);
        
$ret = strtolower($aryStr[count($aryStr)-1]);
        
return $ret;
    }
    
    
/**
     * 從環境變量$_FILES獲取文件名
     *
     
*/
    
function getFileNameFromFILES() {
        
return $_FILES[$this->fileField]['name'];
    }
    
    
/**
     * 從環境變量$_FILES獲取臨時變量名
     *
     
*/
    
function getTmpFileNameFromFILES() {
        
return $_FILES[$this->fileField]['tmp_name'];
    }
    
    
/**
     * 從環境變量$_FILES獲取文件大小
     *
     
*/
    
function getFileSizeFromFILES() {
        
return $_FILES[$this->fileField]['size'];
    }
    
    
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;
    }
    
    
/**
     * 設置是否debug
     *
     * @param unknown_type $debug
     
*/
    
function setDebug($debug) {
        
$this->debug = $debug;
    }
}

?>

<? 
echo '<br>';
$tmp = new FileUpload(array('filePath'=>'./default'));
foreach ($_FILES as $key => $val) {
    
$res = $tmp->uploadFile($key);
    
if ($res < 0echo $tmp->getErrorMsg().'<br>';
    
else echo '文件上傳成功<br>';
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>多文件上傳demo</title>
</head>

<script language="javascript">

var trIndex = 0;
var tmpIndex = 0;

function addItem() {
    trIndex
++;
    tmpIndex
++;
    
var containerObj = document.getElementById("container0");
    
var tr = containerObj.insertRow(trIndex);
    
var td = tr.insertCell(0);
    str 
= "userfile" + String(trIndex);
    alert(str);
    td.innerHTML 
= "<input id=\""+str+"\"name=\""+str+"\" type=\"file\"" + " <input name=\"del\" type=\"button\" value=\"刪除\" onclick=\"delItem("+String(trIndex)+");\"";    
}


function delItem(trnum) {
    
var containerObj = document.getElementById("container0");
    
var tr = containerObj.deleteRow(trIndex);
    trIndex
--;
}


</script>

<body>

<form id="form0" enctype="multipart/form-data" action="FileUpload.php" method="POST"> 
<table id="container0" width="100%" border="0" cellspacing="5" cellpadding="0">
  
<tr >
    
<td >   <p>
      
<input id="fu0" type="hidden" name="MAX_FILE_SIZE" value="300000000" /> 
      
<input name="userfile" type="file" /> 
      
</p>
      
</td>
  
</tr>
  
<tr >
    
<td >   
    
    
<p>
      
<input name="add" type="button" value="添加" onclick="addItem();" /> 
      
<input type="submit" value="上傳" /> 
        
</p>
        
</td>
        
</tr>
</table>

 
</form> 

</body>
</html>
posted on 2008-04-12 11:47 閱讀(1533) 評論(0)  編輯 收藏 引用 所屬分類: PHP之路
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产一区在线| 亚洲毛片在线看| 牛人盗摄一区二区三区视频| 久久精品国产第一区二区三区| 香蕉久久国产| 久久精品国产免费| 老司机一区二区| 欧美日韩国产首页| 国产精品久久久久久久9999 | 亚洲欧洲综合另类| 亚洲福利视频一区二区| 国产精品国产三级国产专区53 | 亚洲国内精品| 在线一区亚洲| 久久久久**毛片大全| 欧美国产日韩二区| 国产精品午夜av在线| 亚洲第一主播视频| 亚洲欧美一区二区三区久久 | 亚洲一区二区视频| 久久综合给合久久狠狠色| 欧美精品在线观看播放| 国产精品一二一区| 亚洲人成在线播放| 欧美亚洲免费| 亚洲美女福利视频网站| 久久网站免费| 国产人妖伪娘一区91| 亚洲精品综合精品自拍| 久久久久国产精品一区二区| 亚洲激情视频在线观看| 欧美一区二区三区啪啪| 欧美日韩a区| 亚洲国产免费| 久久躁日日躁aaaaxxxx| 在线综合亚洲欧美在线视频| 噜噜噜久久亚洲精品国产品小说| 国产精品美女视频网站| 99riav久久精品riav| 欧美电影美腿模特1979在线看| 香蕉久久a毛片| 国产伦精品一区二区三区四区免费| 日韩视频中午一区| 亚洲高清视频在线观看| 久久人91精品久久久久久不卡| 国产精品美女主播在线观看纯欲| 亚洲精选一区| 亚洲激情图片小说视频| 噜噜噜91成人网| 亚洲国产精品成人久久综合一区| 久久精品青青大伊人av| 亚洲欧美日韩精品久久久久| 欧美日韩亚洲91| 亚洲视频每日更新| 一区二区三区波多野结衣在线观看| 欧美v亚洲v综合ⅴ国产v| 亚洲国产免费看| 亚洲韩国日本中文字幕| 欧美国产精品一区| 日韩视频永久免费观看| 亚洲免费激情| 国产精品午夜在线观看| 欧美在线一二三区| 欧美在线视频日韩| 黄色在线成人| 久久视频免费观看| 夜夜嗨av色综合久久久综合网| 免费亚洲电影| 免费不卡欧美自拍视频| 亚洲激情一区二区| 亚洲全黄一级网站| 国产精品高潮呻吟久久| 欧美一区亚洲| 久久国产88| 亚洲精品美女在线观看| 99热这里只有精品8| 国产精品欧美日韩一区二区| 久久久久成人精品| 欧美国产激情| 午夜激情一区| 久久久91精品国产一区二区精品| 91久久国产自产拍夜夜嗨| 亚洲精品中文字幕有码专区| 国产精品国产馆在线真实露脸| 欧美在线你懂的| 欧美不卡激情三级在线观看| 亚洲一区二区在线视频 | 午夜在线精品| 亚洲电影免费在线观看| 亚洲区在线播放| 国产乱码精品一区二区三区五月婷 | 亚洲欧美日韩网| 在线观看福利一区| 99国内精品| 1024亚洲| 亚洲男人影院| 亚洲精品国产精品国自产观看| 日韩午夜av| 好看的日韩视频| a91a精品视频在线观看| 在线观看一区视频| 亚洲影视中文字幕| 日韩图片一区| 久久久久久亚洲精品杨幂换脸| 日韩亚洲欧美中文三级| 久久国产精品一区二区三区| 亚洲无线视频| 欧美激情第4页| 欧美99久久| 国产一区二区三区奇米久涩| 99精品欧美一区| 亚洲精品久久久蜜桃| 久久国产精品久久国产精品 | 在线观看亚洲精品| 亚洲欧美激情诱惑| 一区二区不卡在线视频 午夜欧美不卡在| 午夜精品久久久久久久久 | 噜噜噜久久亚洲精品国产品小说| 欧美日韩精品免费看| 欧美电影电视剧在线观看| 欧美高清视频一区二区| 狠狠爱www人成狠狠爱综合网| 一本色道久久综合狠狠躁篇的优点 | 一本色道久久综合亚洲精品按摩 | 欧美精品成人在线| 欧美1区视频| 亚洲国产成人精品久久久国产成人一区| 亚洲在线免费| 亚洲欧美日韩国产成人| 欧美伦理视频网站| 亚洲韩国青草视频| 亚洲理论电影网| 免费成人高清视频| 亚洲第一搞黄网站| 亚洲精品国产日韩| 欧美aⅴ99久久黑人专区| 美女性感视频久久久| 国外精品视频| 麻豆精品传媒视频| 亚洲福利在线看| 一区二区高清在线| 国产精品男人爽免费视频1| 亚洲在线一区二区三区| 欧美伊人久久久久久久久影院| 国产欧美丝祙| 久久久免费精品| 91久久在线| 亚洲男人的天堂在线| 国产美女一区二区| 久久精品视频免费| 亚洲大黄网站| 一区二区三区|亚洲午夜| 欧美午夜在线一二页| 亚洲欧美美女| 免费成人在线观看视频| 亚洲人成人99网站| 国产精品啊啊啊| 久久久99免费视频| 日韩一级黄色大片| 久久久午夜视频| 亚洲精品久久久久久久久久久久久| 欧美国产日韩一区二区在线观看| 日韩午夜中文字幕| 久久精品国产精品亚洲综合| 亚洲成人在线免费| 国产精品高潮呻吟久久av黑人| 欧美一区中文字幕| 亚洲精品永久免费| 久久天天躁狠狠躁夜夜av| 亚洲欧洲日本在线| 国产精品丝袜白浆摸在线| 久久人人爽人人爽| 中文久久精品| 欧美黄色小视频| 欧美影院一区| 一区二区三区不卡视频在线观看| 国产一区二区看久久| 欧美日韩一区二区视频在线| 久久久.com| 亚洲女性裸体视频| 亚洲人体1000| 欧美3dxxxxhd| 久久国产手机看片| 制服丝袜亚洲播放| 亚洲国产成人av在线| 国产亚洲欧美另类中文| 欧美日韩精品一区二区天天拍小说 | 精品动漫一区| 国产精品亚洲成人| 欧美日韩国产综合视频在线| 欧美一区二区三区精品 | 免费影视亚洲| 欧美在线视频一区二区| 亚洲一二三区在线观看| 最新国产拍偷乱拍精品| 极品中文字幕一区| 国产一区二区欧美| 国产欧美视频在线观看| 国产精品啊v在线| 欧美视频网站|