最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php文件上傳的兩種實現(xiàn)方法

 更新時間:2016年04月04日 18:42:06   作者:飛鴻影~  
這篇文章主要為大家詳細介紹了兩種php文件上傳的實現(xiàn)方法,感興趣的朋友可以參考一下

文件上傳一般有下面2種方式:

有兩種:
1、標準input表單方式,典型的用$_FILES進行接收;
2、以Base64的方式進行傳送,一般是AJAX異步上傳。

第一種
標準的input表單方式,適用于大文件進行上傳,同時支持批量。html代碼關鍵的幾句:

<form enctype="multipart/form-data" method="post" action="upload.php"">
  <input type="file" name="id_pic[]" accept="image/*" class="form-control" multiple />
  <input type="submit" value="上傳 " />
</form>

不同的name時:

<form enctype="multipart/form-data" method="post" action="upload.php"">
  <input type="file" name="id_pic_1" accept="image/*" class="form-control" />
  <input type="file" name="id_pic_2" accept="image/*" class="form-control" />
  <input type="submit" value="上傳 " />
</form>

其中enctype="multipart/form-data"對于文件上傳是必不可少的。另外type="file"設置input類型,accept="image/*"指定優(yōu)先上傳圖片(MIME 參考手冊)。multiple支持一次選多個文件,pic[]以數(shù)組的形式接收多個文件。手機端端還可以加入?yún)?shù)capture="camera"選擇攝像頭拍照上傳。

后端處理:
通過$_FILES獲取上傳的文件。

$files = $_FILES;
傳多個文件時,如果name不同,則返回的$_FILES數(shù)組格式不同。

name相同時:

array(1) {
 ["id_pic"] => array(5) {
  ["name"] => array(2) {
   [0] => string(5) "1.jpg"
   [1] => string(5) "2.jpg"
  }
  ["type"] => array(2) {
   [0] => string(10) "image/jpeg"
   [1] => string(10) "image/jpeg"
  }
  ["tmp_name"] => array(2) {
   [0] => string(27) "C:\Windows\Temp\php7A7E.tmp"
   [1] => string(27) "C:\Windows\Temp\php7A7F.tmp"
  }
  ["error"] => array(2) {
   [0] => int(0)
   [1] => int(0)
  }
  ["size"] => array(2) {
   [0] => int(77357)
   [1] => int(56720)
  }
 }
}


name不相同時:

   array(2) {
 ["id_pic_1"] => array(5) {
  ["name"] => string(5) "1.jpg"
  ["type"] => string(10) "image/jpeg"
  ["tmp_name"] => string(27) "C:\Windows\Temp\phpBBEE.tmp"
  ["error"] => int(0)
  ["size"] => int(77357)
 }
 ["id_pic_2"] => array(5) {
  ["name"] => string(5) "2.jpg"
  ["type"] => string(10) "image/jpeg"
  ["tmp_name"] => string(27) "C:\Windows\Temp\phpBBEF.tmp"
  ["error"] => int(0)
  ["size"] => int(56720)
 }
}

在對$_FILES進行foreach遍歷時,前面那種輸出格式不大方便。后面那種就可以直接遍歷。我們可以寫個方法進行統(tǒng)一轉(zhuǎn)換:

function dealFiles($files) {
    $fileArray = array();
    $n     = 0;
    foreach ($files as $key=>$file){
      if(is_array($file['name'])) {
        $keys    =  array_keys($file);
        $count   =  count($file['name']);
        for ($i=0; $i<$count; $i++) {
          $fileArray[$n]['key'] = $key;
          foreach ($keys as $_key){
            $fileArray[$n][$_key] = $file[$_key][$i];
          }
          $n++;
        }
      }else{
        $fileArray = $files;
        break;
      }
    }
    return $fileArray;
 }

好,前面講到后端如何處理接收到的$_FILES數(shù)組,并轉(zhuǎn)換成統(tǒng)一格式。接下來任務主要是:
1、檢測上傳的文件是否非法;
2、檢測上傳的文件是否超過大小;
3、檢測保存的路徑是否存在,是否可寫;
4、文件重命名;

其中上傳過程中用到了個很重要的函數(shù):move_uploaded_file(filename , $destination )進行文件移動操作。將$_FILES['id_pic']['tmp_name']移動到新的路徑里。當然,移動前可以用is_uploaded_file($_FILES['id_pic']['tmp_name'])進行判斷文件是否正常上傳的。

多文件上傳則是循環(huán)的方法多次使用move_uploaded_file()進行移動操作。

第二種
主要以上傳圖片為主。
利用input的change事件,借助canvas對圖片進行處理(例如壓縮),然后ajax發(fā)送文件流到后端。

基本原理是通過canvas渲染圖片,再通過 toDataURL 方法壓縮保存為base64字符串(能夠編譯為jpg格式的圖片)。

后端處理:
后端最終會收到前端發(fā)送的base64字符串,接著處理字符串為圖片即可。具體請使用關鍵字base64 轉(zhuǎn) image 開發(fā)語言進行谷歌|百度。前端生成的結果中有一個base64Len,這是字符串的長度,后端應該核對以確認是否提交完整。

//php示例:
$img = base64_decode($_POST['img']);
$img = imagecreatefromstring($img);

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助。

相關文章

  • PHP 加密解密內(nèi)部算法

    PHP 加密解密內(nèi)部算法

    最近學習URL跳轉(zhuǎn)的時候新進三個超好用的PHP加密解密函數(shù),貌似是discuz里的…使用這些加密解密的原因是因為有時自己的URL地址被人獲取以后想破解你里面?zhèn)髦档膬?nèi)容就必須知道你的key,沒有key,他應該要破了一陣子才能知道你URL里面的內(nèi)容吧。
    2010-04-04
  • PHP使用兩個棧實現(xiàn)隊列功能的方法

    PHP使用兩個棧實現(xiàn)隊列功能的方法

    這篇文章主要介紹了PHP使用兩個棧實現(xiàn)隊列功能的方法,結合實例形式分析了php基于兩個棧實現(xiàn)隊列功能的思路與具體操作技巧,需要的朋友可以參考下
    2018-01-01
  • 攻克CakePHP系列三 表單數(shù)據(jù)增刪改

    攻克CakePHP系列三 表單數(shù)據(jù)增刪改

    下面的代碼是CakePHP下對表單數(shù)據(jù)的增加,刪除,修改實現(xiàn)代碼
    2008-10-10
  • PHP簡單遍歷對象示例

    PHP簡單遍歷對象示例

    這篇文章主要介紹了PHP簡單遍歷對象的方法,結合實例形式分析了php使用foreach語句遍歷類對象的實現(xiàn)方法,需要的朋友可以參考下
    2016-09-09
  • php中關于長度計算容易混淆的問題分析

    php中關于長度計算容易混淆的問題分析

    這篇文章主要介紹了php中關于長度計算容易混淆的問題,簡單分析了php關于數(shù)組及字符串長度運算的相關注意事項,需要的朋友可以參考下
    2016-05-05
  • php 常用的系統(tǒng)函數(shù)

    php 常用的系統(tǒng)函數(shù)

    本文介紹了php 常用的系統(tǒng)函數(shù),具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • CMS中PHP判斷系統(tǒng)是否已經(jīng)安裝的方法示例

    CMS中PHP判斷系統(tǒng)是否已經(jīng)安裝的方法示例

    這篇文章主要介紹了CMS中PHP判斷系統(tǒng)是否已經(jīng)安裝的方法示例,需要的朋友可以參考下
    2014-07-07
  • PHP實現(xiàn)JWT的Token登錄認證

    PHP實現(xiàn)JWT的Token登錄認證

    這篇文章通過實例代碼介紹了PHP實現(xiàn)JWT的Token登錄認證的方式,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • php curl常見錯誤:SSL錯誤、bool(false)

    php curl常見錯誤:SSL錯誤、bool(false)

    在命令行中使用curl調(diào)用跳過SSL證書檢查的方法,需要的朋友可以參考下。
    2011-12-12
  • 解析isset與is_null的區(qū)別

    解析isset與is_null的區(qū)別

    isset是語句, 和echo, print一樣, 是PHP本身的一種語言結構. 而is_null是函數(shù), 和我們一般的函數(shù)一樣, 可以做為可變函數(shù)調(diào)用
    2013-08-08

最新評論

长葛市| 涟水县| 花莲县| 徐汇区| 三亚市| 固原市| 海阳市| 莱芜市| 克拉玛依市| 宜章县| 南开区| 辽阳县| 永城市| 元阳县| 辽宁省| 宣武区| 磐安县| 河曲县| 塔河县| 葫芦岛市| 长沙市| 福清市| 廉江市| 连州市| 福泉市| 邹城市| 晋宁县| 新泰市| 紫云| 彩票| 黄平县| 古蔺县| 阳东县| 石家庄市| 安康市| 石嘴山市| 恩施市| 嵊州市| 周宁县| 屏东市| 潍坊市|