程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP上傳類upload.php的具體使用方法

PHP上傳類upload.php的具體使用方法

編輯:關於PHP編程

我們今天為大家帶來的是關於具體代碼如下:

  1. <?php 
  2.  
  3. /**  
  4.  * 我的文件上傳類  
  5.  *  
  6.  * 未完成的功能:  
  7.  * 1.對目標目錄是否存在的判斷  
  8.  * 2.如果上傳時出現重名,自動重命名  
  9.  *   
  10.  * @author M.Q. <[url]www.mengqi.net[/url]> 
  11.  */  
  12. class upload  
  13. {  
  14.     /**  
  15.      * PHP上傳類upload.php上傳文件的信息,此值由構造函數取得,如果上傳文件失敗或出錯或未上傳,則此值為false  
  16.      *  
  17.      * @var array  
  18.      */  
  19.     private $file = false;   
  20.       
  21.      
  22.     /**  
  23.      * 構造函數:取得上傳文件的信息  
  24.      *   
  25.      * 如果在上傳文件的工程中發生錯誤,那麼出錯的文件不會放在結果中返回,結果中的文件都是可用的  
  26.      *  
  27.      * @param string $tag form表單中<input>標簽中name屬性的值,例<input name="p" type="file"> 
  28.      *   
  29.      * 例1,上傳單個文件:  
  30.      * <input name="upfile" type="file"> 
  31.      *   
  32.      * 例2,上傳多個文件:  
  33.      * <input name="upfile[]" type="file"> 
  34.      * <input name="upfile[]" type="file"> 
  35.      *   
  36.      * 結果(保存在$file變量中)如下:  
  37.      *   
  38.      * array(  
  39.      * [0] => array(  
  40.      *      'name'      => 'abc.txt'  
  41.      *      'type'      => 'text/plain’  
  42.      *      'tmp_name'  => '/tmp/phpgxecCb'  
  43.      *      'error'     => 0  
  44.      *      'size'      => 62  
  45.      *      )  
  46.      * [1] => array(  
  47.      *      'name'      => 'abc.txt'  
  48.      *      'type'      => 'text/plain’  
  49.      *      'tmp_name'  => '/tmp/phpgxecCb'  
  50.      *      'error'     => 0  
  51.      *      'size'      => 62  
  52.      *      )  
  53.      * )  
  54.      */  
  55.     public function __construct($tag)  
  56.     {  
  57.         $file = $_FILES[$tag];  
  58.                  
  59.         if (!isset($file) || empty($file))   
  60.         {  
  61.             return; //沒有上傳文件  
  62.         }  
  63.           
  64.         $num = count($file['name']); //PHP上傳類upload.php上傳文件的個數  
  65.           
  66.         $data = array(); //用來保存上傳文件的信息的數組  
  67.  
  68.         //上傳了多個文件  
  69.         if ($num > 1)  
  70.         {  
  71.             for($i = 0; $i < $num; $i++)  
  72.             {  
  73.                 $d = array();  
  74.                 $d['name']       = $file['name'][$i];  
  75.                 $d['type']       = $file['type'][$i];  
  76.                 $d['tmp_name']   = $file['tmp_name'][$i];  
  77.                 $d['error']      = $file['error'][$i];  
  78.                 $d['size']       = $file['size'][$i];  
  79.                   
  80.                 if ($d['error'] == 0)  
  81.                 {  
  82.                     $data[] = $d;  
  83.                 }  
  84.                 else   
  85.                 {  
  86.                     @unlink($d['tmp_name']);  
  87.                 }  
  88.             }  
  89.         }  
  90.         //只上傳了一個文件  
  91.         else   
  92.         {  
  93.             $d = array();  
  94.             $d['name']       = $file['name'];  
  95.             $d['type']       = $file['type'];  
  96.             $d['tmp_name']   = $file['tmp_name'];  
  97.             $d['error']      = $file['error'];  
  98.             $d['size']       = $file['size'];  
  99.               
  100.             if ($d['error'] == 0)  
  101.             {  
  102.                 $data[] = $d;  
  103.             }  
  104.             else   
  105.             {  
  106.                 @unlink($d['tmp_name']);  
  107.             }  
  108.         }  
  109.           
  110.         if (empty($data)) return;  
  111.           
  112.         $this -> file = $data; //保存上傳文件的信息  
  113.     }  
  114.       
  115.     /**  
  116.      * 將上傳的文件從臨時文件夾移動到目標路徑  
  117.      *  
  118.      * @param array $src 文件信息數組,是$file數組的其中一個元素(仍然是數組)  
  119.      * @param string $destpath 上傳的目標路徑  
  120.      * @param string $filename 上傳後的文件名,如果為空,則使用上傳時的文件名  
  121.      * @return bool  
  122.      */  
  123.     public function save($src, $destpath, $filename = null)  
  124.     {  
  125.         $srcTName = $src['tmp_name']; //原始上傳文件的臨時文件名  
  126.         $srcFName = $src['name'];     //原始文件名  
  127.           
  128.         //如果$filename參數為空,則使用上傳時的文件名  
  129.         if (empty($filename))  
  130.         {  
  131.             $filename = $srcFName;  
  132.         }  
  133.           
  134.         //$dest是文件最終要復制到的路徑和文件名  
  135.         if (empty($destpath))  
  136.         {  
  137.             $dest = $filename;  
  138.         }  
  139.         else   
  140.         {  
  141.             //修正路徑中的斜槓,將末尾的修改為/,如果末尾不是也不是/,則給末尾添加一個/  
  142.             $pathend = $destpath[strlen($destpath) - 1]; //上傳的目標路徑的最後一個字符  
  143.             if ($pathend == '\')  
  144.             {  
  145.                 $dest = substr_replace($destpath, '/', strlen($destpath)-1).$filename;  
  146.             }  
  147.             else if ($pathend != '/')  
  148.             {  
  149.                 $dest = $destpath.'/'.$filename;  
  150.             }  
  151.             else   
  152.             {  
  153.                 $dest = $destpath.$filename;  
  154.             }  
  155.         }  
  156.             
  157.         //上傳文件成功  
  158.         if (@move_uploaded_file($srcTName, $dest))  
  159.         {  
  160.               
  161.             return true;   
  162.         }  
  163.         else   
  164.         {  
  165.             return false;  
  166.         }  
  167.     }  
  168.       
  169.     /**  
  170.      * 取得上傳文件的信息  
  171.      *  
  172.      * @return array  
  173.      */  
  174.     public function getFileInfo()  
  175.     {  
  176.         return $this->file;  
  177.     }  
  178. }  
  179.  
  180.  
  181. $a = new upload('upfile');  
  182.  
  183. $fileinfo = $a -> getFileInfo();  
  184. if ($fileinfo == false)  
  185. {  
  186.     echo '沒有上傳文件!';  
  187.     exit;  
  188. }  
  189.  
  190. for($i = 0; $i < count($fileinfo); $i++)  
  191. {  
  192.     echo '正在上傳 '.$fileinfo[$i]['name'].' ';  
  193.     if ($a -> save($fileinfo[$i], 'upload')) echo '完畢';  
  194.     else echo '失敗';  
  195.     echo '<br>';  
  196. }  
  197. ?> 

以上代碼就是關於PHP上傳類upload.php的具體使用方法。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved