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

隨筆 - 87  文章 - 279  trackbacks - 0
<2006年9月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

潛心看書研究!

常用鏈接

留言簿(19)

隨筆分類(81)

文章分類(89)

相冊

ACM OJ

My friends

搜索

  •  

積分與排名

  • 積分 - 220431
  • 排名 - 118

最新評論

閱讀排行榜

評論排行榜

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

<?php

/**
 * 文件上傳類
 * 成員變量帶*號必須要初始化
 * @version 1.0
 * @author howeey
 
*/
class FileUpload {
    
    
var $filePath//* 文件目的路徑
    
    
var $fileField//* 默認$_FILES[$fileField],通過$_FILES環(huán)境變量獲取上傳文件信息
    
    
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//系統(tǒng)隨機名稱
    
    
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>';
        }
    }
    
    
/**
     * 設置新的文件名(根據(jù)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;
    }
    
    
/**
     * 從環(huán)境變量$_FILES獲取文件錯誤
     *
     
*/
    
function getFileErrorFromFILES() {
        
return $_FILES[$this->fileField]['error'];
    }
    
    
/**
     * 從環(huán)境變量$_FILES獲取文件類型
     *
     
*/
    
function getFileTypeFromFILES() {
        
$str = $_FILES[$this->fileField]['name'];
        
$aryStr = split("\.", $str);
        
$ret = strtolower($aryStr[count($aryStr)-1]);
        
return $ret;
    }
    
    
/**
     * 從環(huán)境變量$_FILES獲取文件名
     *
     
*/
    
function getFileNameFromFILES() {
        
return $_FILES[$this->fileField]['name'];
    }
    
    
/**
     * 從環(huán)境變量$_FILES獲取臨時變量名
     *
     
*/
    
function getTmpFileNameFromFILES() {
        
return $_FILES[$this->fileField]['tmp_name'];
    }
    
    
/**
     * 從環(huán)境變量$_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>
            国产精品视频精品视频| 久久久久这里只有精品| 国产精品久久久久久一区二区三区 | 久久嫩草精品久久久精品| 亚洲欧美综合| 欧美亚洲一区三区| 久久精品视频99| 久久综合九色九九| 欧美激情第三页| 欧美无砖砖区免费| 狠狠做深爱婷婷久久综合一区 | 亚洲欧美日韩一区二区在线| 亚洲一区二区在线观看视频| 香蕉久久一区二区不卡无毒影院| 久久久久国产一区二区三区| 狂野欧美一区| 国产精品高潮视频| 一区在线观看| 99在线热播精品免费| 亚洲男人的天堂在线观看 | 欧美在线啊v一区| 欧美成人中文字幕| 一区二区三区国产盗摄| 午夜综合激情| 欧美成人午夜剧场免费观看| 欧美三级午夜理伦三级中视频| 国产亚洲欧美另类中文| 亚洲精品女av网站| 香蕉久久夜色精品| 亚洲第一页在线| 在线精品观看| 欧美激情一区在线观看| 欧美91福利在线观看| 欧美成人精品| 国产精品欧美日韩| 亚洲日本成人| 欧美一区免费视频| 亚洲九九爱视频| 欧美在线91| 欧美视频精品一区| 亚洲欧洲另类国产综合| 久久黄色级2电影| 亚洲精选一区| 欧美成人蜜桃| 狠狠色狠狠色综合日日小说| 日韩午夜电影av| 日韩视频精品| 欧美视频在线观看免费网址| 欧美在线不卡视频| 亚洲一区二区三区免费观看| 亚洲天堂成人在线视频| 久久久久国产精品麻豆ai换脸| 亚洲人成网站影音先锋播放| 亚洲在线观看视频| 欧美日韩国产成人精品| 亚洲精品日韩精品| 欧美mv日韩mv国产网站app| 亚洲欧美国产精品专区久久| 欧美成人免费视频| 亚洲韩国日本中文字幕| 久久久噜噜噜久久久| 在线亚洲伦理| 亚洲一区二区三区国产| 久久精品观看| 亚洲欧美另类在线观看| 亚洲日本在线观看| 欧美精品播放| 亚洲欧洲在线观看| 亚洲国产精品毛片| 美女精品一区| 亚洲精品一区在线观看| 亚洲高清资源综合久久精品| 欧美高清视频一区二区三区在线观看 | 最新国产精品拍自在线播放| 老司机精品视频一区二区三区| 亚洲综合电影一区二区三区| 亚洲激情第一页| 午夜精品久久久久影视| 久久久人人人| 亚洲欧洲在线观看| 亚洲人成人一区二区三区| 欧美精品在线观看播放| 一片黄亚洲嫩模| 欧美1区2区3区| 亚洲欧美在线磁力| 久久国产精品毛片| 国内在线观看一区二区三区| 欧美天天综合网| 欧美亚洲综合另类| 久久久久女教师免费一区| 亚洲激情第一页| 亚洲午夜精品久久久久久app| 国产欧美视频一区二区三区| 久久免费国产精品1| 牛牛精品成人免费视频| 在线亚洲一区二区| 亚洲一二三区精品| 在线成人中文字幕| 亚洲精品乱码久久久久久蜜桃91 | 很黄很黄激情成人| 亚洲国产色一区| 国产精品一区二区久久久| 免费美女久久99| 国产精品美女久久| 久久另类ts人妖一区二区| 欧美另类变人与禽xxxxx| 欧美综合二区| 欧美精品一区二区三区在线看午夜 | 在线免费观看欧美| 亚洲永久精品国产| 欧美一区二区三区免费视频| 久久久亚洲高清| 蜜桃av久久久亚洲精品| 亚洲国产老妈| 欧美日韩亚洲成人| 国产精品99久久99久久久二8| 亚洲综合视频一区| 欧美成人精品影院| 久久成人精品视频| 欧美日韩一卡二卡| 久久另类ts人妖一区二区| 亚洲精品无人区| 欧美激情一区二区三区高清视频| 欧美高清hd18日本| 久久激情视频| 中日韩美女免费视频网站在线观看| 国产午夜精品福利| 国产欧美视频一区二区三区| 欧美—级在线免费片| 久久精品人人| 欧美日韩亚洲不卡| 久久天堂成人| 午夜精品在线观看| 国产精品99久久99久久久二8 | 韩国在线视频一区| 久久亚洲精品网站| 亚洲第一毛片| 亚洲精品一区二区三| 欧美丝袜第一区| 欧美一级视频一区二区| 久久激情一区| 在线观看视频亚洲| 欧美三级网址| 欧美bbbxxxxx| 亚洲永久免费| 亚洲午夜视频在线观看| 亚洲午夜精品17c| 欧美日韩中文在线| 国产麻豆9l精品三级站| 国产精品久久久久999| 欧美人与禽性xxxxx杂性| 免费观看亚洲视频大全| 欧美精品一区三区在线观看| 国产精品久久久久久久久久妞妞 | 欧美成人精品在线观看| 久久精品亚洲乱码伦伦中文| 亚洲欧洲一级| 免费视频一区| 一本色道久久综合亚洲精品不| 欧美国产精品劲爆| 日韩午夜在线播放| 欧美暴力喷水在线| 亚洲精品一线二线三线无人区| 一本色道久久综合狠狠躁的推荐| 欧美婷婷久久| 欧美一区三区三区高中清蜜桃| 久久综合婷婷| 99av国产精品欲麻豆| 国产精品视频久久一区| 久久激情综合网| 亚洲国产一区二区精品专区| 一区二区三区欧美亚洲| 国产精品99免视看9| 欧美在线观看网站| 亚洲高清不卡一区| 亚洲免费中文| 亚洲国产精品毛片| 国产精品美女在线观看| 久久久国产成人精品| 亚洲免费av片| 久久久久久亚洲精品中文字幕| 日韩视频一区| 亚洲小视频在线观看| 精品电影在线观看| 欧美日韩一区在线| 久久久国产成人精品| 亚洲一卡二卡三卡四卡五卡| 欧美成人一品| 久久精品毛片| 亚洲欧美亚洲| 亚洲欧洲精品一区二区| 国产美女精品人人做人人爽| 欧美国产在线观看| 久久精品亚洲一区二区三区浴池| 一区二区三区视频在线看| 欧美激情亚洲另类| 久久一区二区三区av| 欧美一级网站| 午夜精品福利一区二区三区av | 久久精品成人欧美大片古装|