一個方便簡單的php檔案上傳的類

來源:互聯網
上載者:User

以前一直用上面的這個檔案上傳類,發現有很多不方便的地方。

現在自己重新做了一個,大家幫我評評,是不是有什麼不足之處。

<?php
/*
 * 檔案上傳類
 * 作    者:多菜鳥
 * 聯絡郵箱:kingerq AT msn DOT com
 * 建立時間:2005-06-11
 * 來  源:http://blog.csdn.net/kingerq
 *
 * 執行個體:
<?
$f = new upfile("./soft/", "gif,jpg,png");
//上傳單個或者多個同檔案網域名稱稱檔案
if(isset($_FILES["files"]){
 if($f->upload("files")){
  echo "檔案上傳成功.";
 }
}
//上傳多個不同檔案網域名稱稱檔案
if(isset($_FILES){
 foreach($_FILES as $key=>$val)
 if($f->upload($key)){
  echo "檔案上傳成功.";
 }
}
?>
 */
class upfile{
 //上傳檔案資訊
 var $filename;
    // 儲存名
    var $savename;
    // 儲存路徑
    var $savepath;
    // 檔案格式限定,為空白時不限制格式
    var $format = "";
    // 覆蓋模式
    var $overwrite = 0;
 /* $overwrite = 0 時不覆蓋同名檔案
  * $overwrite = 1 時覆蓋同名檔案
  */
    //檔案最大位元組
    var $maxsize = 210000000;
    //副檔名
    var $ext;
    //錯誤代號
    var $errno = 0;
 
    /* 建構函式
  * $path 儲存路徑
  * $format 檔案格式(用逗號分開)
  * $maxsize 檔案最大限制
  * $over 複蓋參數
  */
 function upfile($path, $format = "", $maxsize = 0, $over = 0){
  $this->savepath = substr($path, -1) == "/" ? $path : $path."/";//儲存路徑
  $this->overwrite = $over;//是否複蓋相同名字檔案
  $this->maxsize = !$maxsize ? $this->maxsize : $maxsize;//檔案最大位元組
  $this->format = $format;
 }
 
 /*
  * 功能:檢測並組織檔案
  * $form 檔案網域名稱稱
  * $file 上傳檔案儲存名稱,為空白或者上傳多個檔案時由系統自動產生名稱
  */
 function upload($form, $file = ""){
  if(!isset($_FILES[$form])){
   $this->halt("指定的檔案網域名稱稱不存在。");
  }else{
   $filear = $_FILES[$form];
  }
  
  if(!is_writable($this->savepath)){
   $this->halt("指定的路徑不可寫。");
  }
  
  if(is_array($filear["name"])){//上傳同檔案網域名稱稱多個檔案
   for($i = 0; $i < count($filear["name"]); $i++){
    $ar["name"] = $filear["name"][$i];
    $ar["tmp_name"] = $filear["tmp_name"][$i];
    $ar["size"] = $filear["size"][$i];
    $ar["error"] = $filear["error"][$i];
    
    $this->getext($ar["name"]);//取得副檔名
    $this->set_savename();//設定儲存檔案名稱
    $this->copyfile($ar);
   }
  }else{//上傳單個檔案
   $this->getext($filear["name"]);//取得副檔名
   $this->set_savename($file);//設定儲存檔案名稱
   $this->copyfile($filear);
  }
  return true;
 }
 
 /*
  * 功能:檢測並複製上傳檔案
  * $filear 上傳檔案資料數組
  */
 function copyfile($filear){
 
  if($filear["size"] > $this->maxsize){
   $this->halt("上傳檔案 ".$filear["name"]." 大小超出系統限定值[".$this->maxsize." 位元組],不能上傳。");
  }
  
  if(!$this->overwrite && file_exists($this->savename)){
   $this->halt($this->savename." 檔案名稱已經存在。");
  }
  
  if($this->format != "" && !in_array(strtolower($this->ext), explode(",", strtolower($this->format)))){
   $this->halt($this->ext." 檔案格式不允許上傳。");
  }
  
  if(!copy($filear["tmp_name"], $this->savepath.$this->savename)){
   $errors = array(0=>"檔案上傳成功",
       1=>"上傳的檔案超過了 php.ini 中 upload_max_filesize 選項限制的值。 ",
       2=>"上傳檔案的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。 ",
       3=>"檔案只有部分被上傳。 ",
       4=>"沒有檔案被上傳。 ");
   $this->halt($errors[$filear["error"]]);
  }else{
   @unlink($filear["tmp_name"]);//刪除臨時檔案
  }
 }
 
 /*
  * 功能: 取得副檔名
  * $filename 為檔案名稱
  */
 function getext($filename){
  if($filename == "") return;
  
  $ext = explode(".", $filename);
  
  $this->ext = $ext[1];
 }
 
    /*
     * 功能: 設定檔案儲存名
     * $savename 儲存名,如果為空白,則系統自動產生一個隨機的檔案名稱
     */
    function set_savename($savename = "")
    {
        if ($savename == "")  // 如果未設定檔案名稱,則產生一個隨機檔案名稱
        {
            srand ((double) microtime() * 1000000);
            $rnd = rand(100,999);
            $name = date('U') + $rnd;
            $name = $name.".".$this->ext;
        } else {
            $name = $savename;
        }
        $this->savename = $name;
    }
 
 /*
  * 功能:錯誤提示
  * $msg 為輸出資訊
  */
 function halt($msg){
  echo "<strong>注意:</strong>".$msg;
  exit;
 }
}
?>



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.