亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP一步步實現文件上傳及上傳文件類

2024-09-04 11:45:13
字體:
來源:轉載
供稿:網友

一,比較簡單的實現文件上傳

文件上傳原理:文件上傳原理:將客戶端的文件先上傳到服務器端,然后再將服務器端的臨時文件移動到指定的目錄。

客戶端配置:要上傳文件,我們需要采用表單,并且表單發送的形式來POST請求,而且要求將enctype設置為multipart/form-data,總結上傳的條件如下:

瀏覽器表單頁面:表單發送方式為post,指定enctype=multipart/form-data,客戶端的代碼:

  1. <form action="uploadFile.php" method="post" accept-charset="utf-8" enctype="multipart/form-data"
  2.     請選擇要上傳的文件: 
  3.     <input type="file" name="myfile"
  4.     <input type="submit" value="上傳文件"
  5. </form> 

$_FILES文件變量,下面是上傳一個圖片然后打印整理出來的數據:

  1. // name => 'QC8054R7QPGQ_1000x500.jpg' 
  2. // type => 'image/jpeg' 
  3. // tmp_name => '/Applications/MAMP/tmp/php/php1X5KZU' 
  4. // error => 0 
  5. // size => 229936 

$_FILES上傳的參數含義說明:

name:上傳的文件的名稱

type: 上傳的文件的MIME類型

tmp_name:文件上傳到服務器的臨時路徑

site:上傳的文件的大小

error:上傳的文件的錯誤碼,0表示上傳成功UPLOAD_ERR_OK

移動文件

移動文件方式一:上傳文件到服務器端是在一個臨時路徑下,我們需要將文件移動到指定的目錄下,我們可以通過下面的函數來實現移動:將指定的文件移到的目錄路徑下,要求待移動的文件是通過HTTP POST上傳的.

bool move_uploaded_file ( string $filename , string $destination )

我們需要判斷一下是否是通過HTTP POST上傳的,下面的方法可以判斷:判斷文件是否是通過HTTP POST上傳的,如果是返回TRUE,否則返回FALSE

bool is_uploaded_file ( string $filename )

移動文件方式二:

我們還可以通過下面的函數來實現移動文件:

參數一:待移動的文件

參數二:移動到的目標路徑

bool copy ( string $source , string $dest [, resource $context ] )

處理上傳:

  1. define('UPLOAD_PATH''Uploads'); 
  2.  
  3. $name = $_FILES['myfile']['name']; 
  4. $type = $_FILES['myfile']['type']; 
  5. $tmp_name = $_FILES['myfile']['tmp_name']; 
  6. $error = $_FILES['myfile']['error']; 
  7. $size = $_FILES['myfile']['size']; 
  8.  
  9. if ($error == UPLOAD_ERR_OK) { 
  10.     if (is_uploaded_file($tmp_name)) { 
  11.         move_uploaded_file($tmp_name, UPLOAD_PATH . '/' . $name); 
  12.     } else { 
  13.         if (is_file($tmp_name) && !copy($tmp_name, UPLOAD_PATH . '/' . $name)) { 
  14.             var_dump('ok'); 
  15.         } //Vevb.com 
  16.     } 
  17. else { 
  18.     // 上傳到服務器就已經出錯了 
  19.     var_dump($error); 

php.ini上傳配置:

假設我們要支持上傳20M的文件,那么我們可以設置以下選項:

一定要設置為On,才能上傳文件,若設置為Off,則服務器是接收不到文件數據的

file_uploads = On

指定上傳文件到服務器的臨時目錄,默認為不打開的,可以不寫

upload_tmp_dir = "d:/uploads_tmp"

支持上傳的文件的最大為20M

upload_max_filesize = 20M

設置POST請求允許一次請求的最大值為100M

post_max_size = 100M

上傳操作允許的最長時間,超過600秒則會停止腳本運行,0表示無限制

max_execution_time = 600

PHP腳本解析請求數據所用的最大時間,默認為60秒,0表示無限制

max_input_time = 600

單個PHP腳本所能申請的最大內存,-1表示無限制!

memory_limit = 128M

上傳文件錯誤碼:

UPLOAD_ERR_OK:代表上傳成功

UPLOAD_ERR_EXTENSION:上傳的文件被PHP擴展程序中斷

UPLOAD_ERR_PARTIAL:文件只有部分被上傳

UPLOAD_ERR_CANT_WRITE:文件寫入失敗

UPLOAD_ERR_FORM_SIZE:表單文件超過了post_max_size

UPLOAD_ERR_INI_SIZE:文件大小超過了限制上傳的大小

UPLOAD_ERR_NO_FILE:沒有文件被上傳

UPLOAD_ERR_NO_TMP_DIR:找不到臨時目錄

客戶端限制上傳:

我們可以通過隱藏域來實現限制上傳的文件大小,同時可以通過accept來限制上傳的文件的類型,如下所示:

  1. <form action="uploadFile.php" method="post" accept-charset="utf-8" enctype="multipart/form-data"
  2.     <input type="hidden" name="MAX_FILE_SIZE" value="1024"
  3.     請選擇要上傳的文件: 
  4.     <input type="file" name="myfile" accept="image/png"
  5.     <input type="submit" value="上傳文件"
  6. </form> 

服務端限制上傳:

我們可以通過在服務端來判斷文件類型、文件大小,上傳方式等來判斷是否滿足條件,然后才處理文件!

  1. define('UPLOAD_PATH''Uploads'); 
  2. define('MAX_FILE_SIZE', 2 * 1024 * 1024); 
  3.  
  4. header('Content-type:text/html;Charset=utf-8'); 
  5.  
  6. $name = $_FILES['myfile']['name']; 
  7. $type = $_FILES['myfile']['type']; 
  8. $tmp_name = $_FILES['myfile']['tmp_name']; 
  9. $error = $_FILES['myfile']['error']; 
  10. $size = $_FILES['myfile']['size']; 
  11.  
  12. $allowExt = array('png''jpg''jpeg'); 
  13.  
  14. if ($error == UPLOAD_ERR_OK) { 
  15.     if ($size > MAX_FILE_SIZE) { 
  16.         exit('上傳的文件過大'); 
  17.     } 
  18.  
  19.     // 取上傳的文件的擴展類型 
  20.     $ext = pathinfo($name, PATHINFO_EXTENSION); 
  21.     if (!in_array($ext$allowExt)) { 
  22.         exit('非法文件類型'); 
  23.     } 
  24.  
  25.     if (!is_uploaded_file($tmp_name)) { 
  26.         exit('文件不是HTTP POST上傳過來的'); 
  27.     } 
  28.  
  29.     if (move_uploaded_file($tmp_name, UPLOAD_PATH . '/' . $name)) { 
  30.         echo '文件上傳成功'
  31.     } else { 
  32.         echo "文件上傳失敗"
  33.     } 
  34. else { 
  35.     // 上傳到服務器就已經出錯了 
  36.     var_dump($error); 

忽略文件重名之類的問題,那些需要額外添加一些小處理哦!

二,上傳文件類

  1. ini_set('display_errors''On'); 
  2. error_reporting(E_ALL); 
  3. header('Content-type:text/html;Charset=utf-8'); 
  4.  
  5. /** 
  6. * Class for Uploading a single image   
  7. */ 
  8. class Upload { 
  9.     protected $fileName/* eg, $_FILES['file'], the name is file. */ 
  10.     protected $allowExt/* Allow extension for uploading a file */ 
  11.     protected $allowMIMEType;      /* Allow uploading file mine types */ 
  12.     protected $fileMaxSize/* Limit a uploading file size */ 
  13.     protected $uploadPath;  /* The destination path */ 
  14.     protected $isImageFlag;     /* Note that file is an image or not. */ 
  15.     protected $errorMessage;     
  16.     protected $fileExt
  17.     protected $fileInfos
  18.     protected $fileUniqueName
  19.     protected $fileDestPath
  20.  
  21.     public function __construct($fileName = 'file'$uploadPath = './Uploads'$isImageFlag = true, $fileMaxSize = 1048576, $allowExt = array('png''jpg''jpeg''gif'), $allowMIMEType = array('image/png''image/jpeg''image/gif')) { 
  22.         $this->fileName = $fileName
  23.         $this->allowExt = $allowExt
  24.         $this->allowMIMEType = $allowMIMEType
  25.         $this->uploadPath = $uploadPath
  26.         $this->isImageFlag = $isImageFlag
  27.         $this->fileMaxSize = $fileMaxSize
  28.         // print_r($_FILES); 
  29.         $this->fileInfos = $_FILES[$fileName]; 
  30.     } 
  31.  
  32.     public function uploadFile() { 
  33.         if ($this->isValidExt()  
  34.             && $this->isValidMIMEType()  
  35.             && $this->isValidFileSize()  
  36.             && $this->isRealImage() 
  37.             && $this->isHTTPPOST() 
  38.             && !$this->hasError()) { 
  39.             $this->isUploadPathExist(); 
  40.             $this->fileUniqueName = $this->getUniqueName(); 
  41.             $this->fileDestPath = $this->uploadPath . '/' . $this->fileUniqueName . '.' . $this->fileExt; 
  42. // echo iconv('gb2312', 'UTF-8', $this->fileDestPath); 
  43.             if (@move_uploaded_file($this->fileInfos['tmp_name'], $this->fileDestPath)) { 
  44.                 return $this->fileDestPath; 
  45.             } else { 
  46.                 $this->errorMessage = '文件上傳失敗'
  47.             } 
  48.         } else { 
  49.             $this->errorMessage = '文件上傳失敗'
  50.         } 
  51.  
  52.         exit('<span style="color:red">'.$this->errorMessage.'</span>');  
  53.     } 
  54.  
  55.     protected function hasError() { 
  56.         $ret = true; 
  57.  
  58.         if (!is_null($this->fileInfos)) { 
  59.             switch ($this->fileInfos['error']) { 
  60.                 case UPLOAD_ERR_INI_SIZE: 
  61.                    $this->errorMessage = '文件大小超過PHP.ini文件中upload_max_filesize'
  62.                    break
  63.                 case UPLOAD_ERR_FORM_SIZE: 
  64.                     $this->errorMessage = '文件大小超過了表單中MAX_FILE_SIZE設置的值'
  65.                     break
  66.                 case UPLOAD_ERR_NO_TMP_DIR: 
  67.                     $this->errorMessage = '找不到臨時文件目錄'
  68.                     break
  69.                 case UPLOAD_ERR_NO_FILE: 
  70.                     $this->errorMessage = '沒有選擇任何文件上傳'
  71.                     break
  72.                 case UPLOAD_ERR_CANT_WRITE: 
  73.                     $this->errorMessage = '文件不可寫'
  74.                     break
  75.                 case UPLOAD_ERR_PARTIAL: 
  76.                     $this->errorMessage = '只有部分文件被上傳'
  77.                     break
  78.                 case UPLOAD_ERR_EXTENSION: 
  79.                     $this->errorMessage = '文件上傳過程中被PHP擴展程序中斷'
  80.                     break
  81.                 default
  82.                     $this->errorMessage = ''
  83.                     $ret = false; 
  84.             } 
  85.         } else { 
  86.             $this->errorMessage = '文件上傳出錯'
  87.         } 
  88.  
  89.         return $ret
  90.     } 
  91.  
  92.     protected function isValidFileSize() { 
  93.         if ($this->fileInfos['size'] > $this->fileMaxSize) { 
  94.             $this->errorMessage = '文件太大'
  95.             return false; 
  96.         } 
  97.  
  98.         return true; 
  99.     } 
  100.  
  101.     protected function isValidExt() { 
  102.         $ext = pathinfo($this->fileInfos['name'], PATHINFO_EXTENSION); 
  103.         if (!in_array($ext$this->allowExt)) { 
  104.             $this->errorMessage = '不支持的文件類型'
  105.             return false; 
  106.         } 
  107.  
  108.         $this->fileExt = $ext
  109.         return true;; 
  110.     } 
  111.  
  112.     protected function isValidMIMEType() { 
  113.         $type = $this->fileInfos['type']; 
  114.  
  115.         if (!in_array($type$this->allowMIMEType)) { 
  116.             $this->errorMessage = '不支持的文件MIME類型'
  117.             return false; 
  118.         } 
  119.  
  120.         return true; 
  121.     } 
  122.  
  123.     protected function isHTTPPOST() { 
  124.         if (!is_uploaded_file($this->fileInfos['tmp_name'])) { 
  125.             $this->errorMessage = '文件不是通過HTTP POST傳上來的'
  126.  
  127.             return false; 
  128.         } 
  129.  
  130.         return true; 
  131.     } 
  132.  
  133.     protected function isRealImage() { 
  134.         if ($this->isImageFlag && !getimagesize($this->fileInfos['tmp_name'])) { 
  135.             $this->errorMessage = '文件不是圖片';  
  136.             return false; 
  137.         } 
  138.  
  139.         return true; 
  140.     } 
  141.  
  142.     protected function isUploadPathExist() { 
  143.         if (!file_exists($this->uploadPath)) { 
  144.             mkdir($this->uploadPath, 0777, true); 
  145.         }  
  146.     } 
  147.  
  148.     protected function getUniqueName() { 
  149.         return md5(microtime(true), true); 
  150.     } 
  151.  
  152. $upload = new Upload('myfile'); 
  153. if ($upload->uploadFile()) { 
  154.     echo "文件上傳成功"
  155. }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品av免费在线观看| 亚洲在线视频观看| 91欧美激情另类亚洲| 国产欧美日韩丝袜精品一区| 91精品国产高清自在线看超| 欧美片一区二区三区| 国产成人av在线| 国产欧美久久久久久| 欧美性猛交xxxx乱大交蜜桃| 国产精品电影久久久久电影网| 91在线精品播放| 亚洲剧情一区二区| 国产成人免费av电影| 91九色国产视频| 久久在线视频在线| 欧美日韩免费看| 精品久久久久久久大神国产| 国产成人精品久久二区二区| 欧美在线亚洲在线| 91产国在线观看动作片喷水| 91欧美日韩一区| 日韩精品视频在线| 国产欧美va欧美va香蕉在线| 浅井舞香一区二区| 国产一区欧美二区三区| 国产精品国产自产拍高清av水多| 国外成人免费在线播放| 亚洲色图第三页| 亚洲精品电影在线| 久久久国产精彩视频美女艺术照福利| 日韩h在线观看| 一区二区亚洲精品国产| 欧美大尺度激情区在线播放| 日韩av一区二区在线观看| 国产在线不卡精品| 国产成人综合亚洲| 国产精品视频永久免费播放| 日韩成人在线播放| 日韩在线观看网站| 国产精品劲爆视频| 久久久极品av| 91免费在线视频网站| 欧美日韩一区免费| 日韩性生活视频| 国产在线观看91精品一区| 2019最新中文字幕| 在线成人中文字幕| 成人免费淫片视频软件| 国产精品海角社区在线观看| 97精品国产97久久久久久免费| 国产视频亚洲视频| 国产69精品99久久久久久宅男| 5278欧美一区二区三区| 色综合久久天天综线观看| 国产欧美精品一区二区三区-老狼| 精品久久久久久久久久久久久久| 国产精品老牛影院在线观看| 日韩欧美第一页| 中文字幕亚洲天堂| 韩国一区二区电影| 亚洲一区精品电影| 另类视频在线观看| 97超级碰碰碰久久久| 中文字幕一区电影| 亚洲欧美另类在线观看| 精品欧美激情精品一区| 日韩av免费在线看| 北条麻妃99精品青青久久| 美女少妇精品视频| 国产精品一区二区三区久久| 欧美综合第一页| 国产91在线视频| 亚洲激情视频网| 日本一本a高清免费不卡| 亚洲精品福利在线观看| 91亚洲国产成人精品性色| 国产精品jizz在线观看麻豆| 久久久久久久久久久成人| 91精品久久久久久久久久另类| 日韩激情av在线免费观看| 亚洲缚视频在线观看| 91av在线精品| 一区二区三区天堂av| 国产成人激情视频| 91久久国产精品| 欧美精品videos性欧美| 色午夜这里只有精品| 久久久久久噜噜噜久久久精品| 日韩综合视频在线观看| 欧美专区中文字幕| 成人xvideos免费视频| 亚洲综合精品一区二区| 成人a在线视频| 国产手机视频精品| 亚洲人成电影在线观看天堂色| 亚洲四色影视在线观看| 久久天天躁狠狠躁夜夜躁| 亚洲欧美国产日韩中文字幕| 国产精品久久久久免费a∨| 欧美在线亚洲在线| 欧美午夜片欧美片在线观看| 国内外成人免费激情在线视频| 亚洲最大的成人网| 日韩视频在线免费| 亚洲电影第1页| 成人欧美一区二区三区黑人孕妇| 亚洲精品成人av| 欧美高清视频在线播放| 亚洲一区二区三区在线视频| 91麻豆国产语对白在线观看| 亚洲一区亚洲二区亚洲三区| 一本一道久久a久久精品逆3p| 精品国产乱码久久久久久婷婷| 日韩精品在线视频美女| 欧美一级片免费在线| 欧美日韩一区二区三区在线免费观看| 久久成人免费视频| 亚洲人成自拍网站| 91日韩在线视频| 欧美激情在线播放| 亚洲精品乱码久久久久久金桔影视| 亚洲黄在线观看| 国产视频精品在线| 欧美大片免费观看在线观看网站推荐| 成人免费黄色网| 亚洲精品永久免费精品| 色yeye香蕉凹凸一区二区av| 91久久久精品| 7777精品久久久久久| 欧美视频在线观看免费网址| 欧美激情视频免费观看| 国产中文欧美精品| 九九热这里只有精品免费看| 国产亚洲欧洲高清| 久久夜色精品国产亚洲aⅴ| 国产精品视频午夜| 国产精品国语对白| 国产性猛交xxxx免费看久久| 欧美精品videosex极品1| 日韩在线观看免费全| 俺去了亚洲欧美日韩| 欧美激情高清视频| 久久人人爽亚洲精品天堂| 国产欧美日韩最新| 亚洲精品白浆高清久久久久久| 88国产精品欧美一区二区三区| 亚洲a成v人在线观看| 2018日韩中文字幕| 成人国产精品免费视频| 国产一区二区三区久久精品| 97婷婷大伊香蕉精品视频| 91沈先生在线观看| 国内揄拍国内精品| 欧美一级成年大片在线观看| 久久久久久亚洲精品不卡| 久久99视频精品| 国产精品美女主播| 国产免费一区视频观看免费| 欧美尤物巨大精品爽| 欧美激情2020午夜免费观看| 日韩免费电影在线观看| 亚洲国产成人精品一区二区| 亚洲第一天堂无码专区| 亚洲成人av资源网|