自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PHP通用文件上傳類的具體解析

開發(fā) 后端
PHP通用文件上傳類的實(shí)質(zhì)就是用到PHP組文件上傳,在具體的編寫代碼過程中,要特別注意的是name后面必須要加上[],方便我們調(diào)用層循環(huán)。

我們下面為大家具體講解PHP通用文件上傳類的具體代碼編寫,希望初學(xué)者能夠通過本文學(xué)到一些新的知識,增加自己的編程實(shí)踐經(jīng)驗(yàn)。由于做項(xiàng)目中經(jīng)常遇到文件上傳,因此封裝了一個通用的文件上傳類,作用支持組文件上傳,并且不同的上傳域可以上傳不同的文件類型,不同的文件類型限制的文件大小也可能不相同。

#t#舉例來說:用戶可上傳一種展品并可為該展品上傳一張縮略圖,那么縮略圖文件限制類型可能為jpg,,gif,png等,而展品文件限制類型可能為mov,avi,mpeg等,而圖片大小可能限制為100KB,音頻視頻大小可能限制為2MB。類代碼如下:

  1. class Upload  
  2. {  
  3.     public $InputName;    // 文件上傳域控件名  
  4.       
  5.     /**    
  6.     * 允許上傳的文件類型  
  7.     * 形式為 array('image/jpeg', 'image/png', 'image/gif') 或包含此類數(shù)組的數(shù)組(與每個上傳域控件對應(yīng))  
  8.     */  
  9.     public $FileType;  
  10.       
  11.     /**    
  12.     * 最大上傳文件大?。▎挝唬篵yte)  
  13.     * 形式為 array('image' => $size, 'audio' => $size)(表示每種應(yīng)用文件類型所對應(yīng)的上傳大小) 或包含此類數(shù)組的數(shù)組(與每個上傳域控件對應(yīng))或一數(shù)值(表示所有上傳文件均限制在此大小之下)  
  14.     */  
  15.     public $FileMaxSize;   
  16.       
  17.     public $FileSavePath;  // 文件保存路徑(可為數(shù)組形式,表示不同上傳域上傳文件到不同的路徑)  
  18.     public $FileSaveName;  // 文件保存名(不包含后綴名)(可為數(shù)組形式,表示不同上傳域上傳文件保存的不同名稱)  
  19.     public $NoteFileFalse; // 文件錯誤提示  
  20.     public $NoteFileType;  // 文件類型不符提示  
  21.     public $NoteFileSize;  // 文件大小超出提示  
  22.       
  23.     /* 上傳文件并返回文件名信息(包含后綴名) */  
  24.     public function UploadFile()  
  25.     {  
  26.         $this->CheckFile(); // 檢驗(yàn)文件  
  27.         $file = $_FILES[$this->InputName];  
  28.         $file_save_full_name = array(); // 文件保存名(包含后綴名)  
  29.           
  30.         foreach ($file['name'] as $key => $name)  
  31.         {  
  32.             if (!empty($name)) // 文件不為空  
  33.             {  
  34.                 /* 確定文件保存路徑 */  
  35.                 if (is_array($this->FileSavePath))  
  36.                 {  
  37.                     $file_save_path = $this->FileSavePath[$key];  
  38.                 }  
  39.                 else   
  40.                 {  
  41.                     $file_save_path = $this->FileSavePath;  
  42.                 }  
  43.                   
  44.                 /* 確定文件保存名(不包含后綴名) */  
  45.                 if (is_array($this->FileSaveName))  
  46.                 {  
  47.                     $file_save_name = $this->FileSaveName[$key];  
  48.                 }  
  49.                 else   
  50.                 {  
  51.                     $file_save_name = $this->FileSaveName;  
  52.                 }  
  53.                   
  54.                 /* 開始保存 */  
  55.                 $this->CreatePath($file_save_path); // 如果路徑不存在則創(chuàng)建路徑  
  56.                 move_uploaded_file($file["tmp_name"][$key], $file_save_path . $file_save_name . $this->GetSuffix($file['name'][$key]));  
  57.                 $file_save_full_name[] = $file_save_name . $this->GetSuffix($file['name'][$key]);  
  58.             }  
  59.             else   
  60.             {  
  61.                 $file_save_full_name[] = null;  
  62.             }  
  63.         }  
  64.           
  65.         unlink($file);  
  66.           
  67.         /* 如果只有一個文件,則返回單個文件名 */  
  68.         if (count($file_save_full_name) == 1)  
  69.         {  
  70.             $file_save_full_name = $file_save_full_name[0];  
  71.         }  
  72.           
  73.         return $file_save_full_name;  
  74.     }  
  75.       
  76.     /* 檢驗(yàn)文件 */  
  77.     private function CheckFile()  
  78.     {  
  79.         $file = $_FILES[$this->InputName];  
  80.           
  81.         foreach ($file['name'] as $key => $name)  
  82.         {  
  83.             if (!empty($name)) // 文件不為空  
  84.             {  
  85.                 $type  = $file['type'][$key];  
  86.                 $size  = $file['size'][$key];  
  87.                 $error = $file['error'][$key];  
  88.                   
  89.                 /* 確定允許上傳文件類型列表 */  
  90.                 if (is_array($this->FileType[0]))  
  91.                 {  
  92.                     $file_type = $this->FileType[$key];  
  93.                 }  
  94.                 else   
  95.                 {  
  96.                     $file_type = $this->FileType;  
  97.                 }  
  98.                   
  99.                 /* 確定最大上傳文件大小 */  
  100.                 if (is_array($this->FileMaxSize))  
  101.                 {  
  102.                     $file_max_size_key = explode('/', $type);  
  103.                     $file_max_size_key = $file_max_size_key[0];  
  104.                     if (is_array($this->FileMaxSize[0]))  
  105.                     {  
  106.                         $file_max_size = $this->FileMaxSize[$key][$file_max_size_key];  
  107.                     }  
  108.                     else   
  109.                     {  
  110.                         $file_max_size = $this->FileMaxSize[$file_max_size_key];  
  111.                     }  
  112.                 }  
  113.                 else   
  114.                 {  
  115.                     $file_max_size = $this->FileMaxSize;  
  116.                 }  
  117.                   
  118.                 /* 文件錯誤 */  
  119.                 if ($error > 0)  
  120.                 {  
  121.                     die($name . $this->NoteFileFalse);  
  122.                 }  
  123.                   
  124.                 /* 文件大小超過最大上傳文件大小 */  
  125.                 if ((!is_null($file_max_size) && $size > $file_max_size) || ($size == 0))  
  126.                 {  
  127.                     die($name . $this->NoteFileSize);  
  128.                 }  
  129.  
  130.                     /* 文件類型不符 */  
  131.                 if (!in_array($type, $file_type))  
  132.                 {  
  133.                     die($name . $this->NoteFileType);  
  134.                 }  
  135.             }  
  136.         }  
  137.     }  
  138.       
  139.     /* 獲取文件后綴名 */  
  140.     private function GetSuffix($fileName)  
  141.     {  
  142.         return substr($fileName, strrpos($fileName, "."));  
  143.     }  
  144.  
  145.     /* 如果路徑不存在則創(chuàng)建路徑 */  
  146.     private function CreatePath($filePath)  
  147.     {  
  148.         if (!file_exists($filePath))  
  149.         {  
  150.             mkdir($filePath);  
  151.         }  
  152.     }  

PHP通用文件上傳類的使用方法:接著以本文開頭所舉例子來說明該類的調(diào)用方法(呵呵,調(diào)用是很方便的):

$upload_obj = new Upload(); // 文件上傳對象

$upload_obj->InputName = 'upload_test'; // 文件上傳域控件名

$upload_obj->FileType = array(array('image/jpeg', 'image/png'), array('audio/mpeg', 'video/x-msvideo')); // 允許上傳的文件類型

$upload_obj->FileMaxSize = array('image' => 100 * 1024, 'audio' => 2 * 1024 * 1024, 'video' => 2 * 1024 * 1024);

$upload_obj->FileSavePath = array('upload/files/s/', 'upload/files/z/');

$upload_obj->FileSaveName = time();

$upload_obj->NoteFileFalse = '文件錯誤';

$upload_obj->NoteFileType  = '文件類型不符';

$upload_obj->NoteFileSize  = '文件大小超出';

$file_save_full_name = $upload_obj->UploadFile(); // 上傳并獲取文件全名(基本名加擴(kuò)展名)(如果是多個文件則為數(shù)組形式)(全名用于在數(shù)據(jù)庫中存儲信息)

總結(jié):就此可輕松實(shí)現(xiàn)若干文件上傳,其實(shí)PHP通用文件上傳類歸根結(jié)底用到了PHP組文件上傳,要注意的就是控件名的name后別忘了加上[],這樣的好處就是遇到多個文件上傳時就不用在調(diào)用層進(jìn)行循環(huán)或一個一個處理上傳了,我們的應(yīng)用也因此而輕松。

責(zé)任編輯:曹凱 來源: CSDN
相關(guān)推薦

2009-11-24 15:50:09

PHP上傳類uploa

2009-11-24 14:52:45

PHP動態(tài)多文件上傳

2009-12-04 17:06:47

PHP讀取Excel文

2009-11-24 15:23:50

PHP文件上傳進(jìn)度條

2009-11-27 15:31:33

PHP類搜索定位目錄樹

2009-11-24 14:32:03

PHP限制上傳文件大小

2009-11-24 14:45:08

PHP批量上傳圖片

2009-12-01 19:08:18

PHP外部變量

2009-11-30 16:08:32

PHP addslas

2009-11-16 14:09:30

PHP上傳類

2009-11-24 14:22:03

基于PHP的AJAX技

2009-12-02 18:51:12

PHP分頁類

2009-11-25 15:26:03

PHP中反饋表單

2009-11-25 10:02:27

PHP會話Sessio

2009-12-08 17:29:26

PHP extends

2009-11-25 17:14:45

PHP安裝為Apach

2009-11-25 14:00:37

PHP函數(shù)asort(

2009-11-16 10:40:02

PHP上傳文件代碼

2009-11-16 09:35:42

PHP上傳

2009-11-16 11:41:19

PHP上傳大文件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號