欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          PHP多文件上傳如何實現(xiàn)格式化

          本篇文章給大家介紹一下PHP多文件上傳實現(xiàn)格式化的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

          PHP多文件上傳如何實現(xiàn)格式化

          推薦:《2021年P(guān)HP面試題大匯總(收藏)》《php視頻教程》

          文件上傳是所有web應(yīng)用中最常見的功能,而PHP實現(xiàn)這一功能也非常的簡單,只需要前端設(shè)置表單的 enctype 值為 multipart/form-data 之后,我們就可以通過 $_FILES 獲得表單中的 file 控件中的內(nèi)容。

          同時,我們還可以將 file 控件的名稱寫成帶 [] 的數(shù)組形式,這樣我們就可以接收到多個上傳的文件。比如下面這個測試用的表單:

          <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <title>Document</title> </head> <body>     <form action="" enctype="multipart/form-data" method="post">      myfile1:<input type="file" name="myfile[]"/><br/>     myfile2:<input type="file" name="myfile[a][]"/><br/>     myfile3:<input type="file" name="myfile[a][b][]"/><br/>     myfile4:<input type="file" name="myfile[c][]"/><br/>     myfile5:<input type="file" name="myfile[]"/><br/>     myfile6:<input type="file" name="myfile[][]"/><br/>     <br/>     newfile1:<input type="file" name="newfile[][]"/><br/>     newfile2:<input type="file" name="newfile[s]"/><br/>      singlefile: <input type="file" name="singlefile"/><br/>         <input type="submit" value="submit"/>     </form> </body> </html>

          一共有9個 file 控件,其中 myfile 和 newfile 都是數(shù)組類型的表單名,而 singlefile 則是一個單獨的。先簡單的看一下 $_FILES 所獲得的內(nèi)容。

          print_r($_FILES);  Array (     [myfile] => Array         (             [name] => Array                 (                     [0] => 2591d8b3eee018a0a84f671933ab6c74.png                     [a] => Array                         (                             [0] => 12711584942474_.pic_hd 1.jpg                             [b] => Array                                 (                                     [0] => 12721584942474_.pic_hd 1.jpg                                 )                          )                      [c] => Array                         (                             [0] => 12731584942474_.pic_hd.jpg                         )                      [1] => background1.jpg                     [2] => Array                         (                             [0] => adliu_pip_data.xlsx                         )                  )              [type] => Array                 (                     [0] => image/png                     [a] => Array                         (                             [0] => image/jpeg                             [b] => Array                                 (                                     [0] => image/jpeg                                 )                          )                      [c] => Array                         (                             [0] => image/jpeg                         )                      [1] => image/jpeg                     [2] => Array                         (                             [0] => application/vnd.openxmlformats-officedocument.spreadsheetml.sheet                         )                  )              [tmp_name] => Array                 (                     [0] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phphD88ZY                     [a] => Array                         (                             [0] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpNY8MzY                             [b] => Array                                 (                                     [0] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/php3MX5tk                                 )                          )                      [c] => Array                         (                             [0] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpjgrHMj                         )                      [1] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phppXRtnc                     [2] => Array                         (                             [0] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpekSY1M                         )                  )              [error] => Array                 (                     [0] => 0                     [a] => Array                         (                             [0] => 0                             [b] => Array                                 (                                     [0] => 0                                 )                          )                      [c] => Array                         (                             [0] => 0                         )                      [1] => 0                     [2] => Array                         (                             [0] => 0                         )                  )              [size] => Array                 (                     [0] => 4973                     [a] => Array                         (                             [0] => 3007                             [b] => Array                                 (                                     [0] => 1156                                 )                          )                      [c] => Array                         (                             [0] => 6068                         )                      [1] => 393194                     [2] => Array                         (                             [0] => 36714                         )                  )          )      [newfile] => Array         (             [name] => Array                 (                     [0] => Array                         (                             [0] => 數(shù)據(jù)列表 (2).xlsx                         )                      [s] => background1.jpg                 )              [type] => Array                 (                     [0] => Array                         (                             [0] => application/vnd.openxmlformats-officedocument.spreadsheetml.sheet                         )                      [s] => image/jpeg                 )              [tmp_name] => Array                 (                     [0] => Array                         (                             [0] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phplSsRfM                         )                      [s] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpuQAvRb                 )              [error] => Array                 (                     [0] => Array                         (                             [0] => 0                         )                      [s] => 0                 )              [size] => Array                 (                     [0] => Array                         (                             [0] => 77032                         )                      [s] => 393194                 )          )      [singlefile] => Array         (             [name] => timg (8).jpeg             [type] => image/jpeg             [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpxtSQ4J             [error] => 0             [size] => 10273         )  )

          看出有什么問題了嗎?

          $_FILE['singlefile']['name']; $_FILE['singlefile']['type']; $_FILE['singlefile']['tmp_name']; $_FILE['singlefile']['error']; $_FILE['singlefile']['error'];  $_FILE['myfile']['name']['a']['b'][0]; $_FILE['myfile']['type']['a']['b'][0]; $_FILE['myfile']['tmp_name']['a']['b'][0]; $_FILE['myfile']['error']['a']['b'][0]; $_FILE['myfile']['error']['a']['b'][0];

          單個表單是一個 singlefile 為鍵名的數(shù)組,里面是對應(yīng)的 name 、 type 等屬性。這個非常簡單也清晰明了,但是數(shù)組形式上傳的內(nèi)容就比較坑了,每一個屬性下面都有多個值,而且這些值還有可能是嵌套的數(shù)組。

          就比如說我們要獲得 myfile[a][b][] 的上傳文件內(nèi)容,我們就要通過 $_FILE[‘myfile’][‘name’][‘a(chǎn)’][‘b’][0] 、 $_FILE[‘myfile’][‘type’][‘a(chǎn)’][‘b’][0] 這樣的形式獲得相關(guān)的內(nèi)容。

          這個可真的不是很友好,那么我們今天的主題就來了,我們把這種內(nèi)容進行一下格式化,讓他變成和 singlefile 類似的結(jié)構(gòu),也就是一個文件的相關(guān)內(nèi)容都在一個鍵名結(jié)構(gòu)下,比如 myfile[a][b][] 的內(nèi)容就全部都在 $_FILE[‘myfile’][a][b][0]下面。

          $files = []; // 開始數(shù)據(jù)格式化 foreach ($_FILES as $uploadKey => $uploadFiles) {     // 需要將 $_FILES 中的五個字段都拿出來     $files[$uploadKey] = formatUploadFiles($uploadFiles['name'], $uploadFiles['type'], $uploadFiles['tmp_name'], $uploadFiles['error'], $uploadFiles['size']); }  // 格式化上傳文件數(shù)組 function formatUploadFiles($fileNamesArray, $type, $tmp_name, $error, $size) {     $tmpFiles = [];     // 文件名是否是數(shù)組,如果不是數(shù)組,就是單個文件上傳     if (is_array($fileNamesArray)) {         // 數(shù)組形式上傳         foreach ($fileNamesArray as $idx => $fileName) {             // 如果還是嵌套的數(shù)組,遞歸遍歷接下來的內(nèi)容             if (is_array($fileName)) {                 $tmpFiles[$idx] = formatUploadFiles($fileName, $type[$idx] ?? [], $tmp_name[$idx] ?? [], $error[$idx] ?? [], $size[$idx] ?? []);             } else {                 // 組合多維的格式化內(nèi)容                 $tmpFiles[$idx] = [                     'name' => $fileName,                     'type' => $type[$idx] ?? '',                     'tmp_name' => $tmp_name[$idx] ?? '',                     'error' => $error[$idx] ?? '',                     'size' => $size[$idx] ?? '',                 ];             }         }     } else {         // 組合單個的內(nèi)容         $tmpFiles = [             'name' => $fileName,             'type' => $type ?? '',             'tmp_name' => $tmp_name ?? '',             'error' => $error ?? '',             'size' => $size ?? '',         ];     }      return $tmpFiles; }  print_r($files);

          代碼還是非常好理解的,就是通過一段遞歸來遍歷整個 $_FILES 目錄樹,相當于一個深度遍歷。當然,這樣也會帶來性能的下降,畢竟是需要進行循環(huán)+遞歸的遍歷。不過好在大部分情況下我們上傳的文件并不會那么的多。不過反過來說,如果不事先進行格式化,當你想獲得所有的上傳內(nèi)容時,一樣還是需要進行多層或者遞歸遍歷的。

          接下來我們看看格式化之后的輸出:

          Array (     [myfile] => Array         (             [0] => Array                 (                     [name] => 2591d8b3eee018a0a84f671933ab6c74.png                     [type] => image/png                     [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpV7A2yC                     [error] => 0                     [size] => 4973                 )              [a] => Array                 (                     [0] => Array                         (                             [name] => 12711584942474_.pic_hd 1.jpg                             [type] => image/jpeg                             [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/php5q2d1Z                             [error] => 0                             [size] => 3007                         )                      [b] => Array                         (                             [0] => Array                                 (                                     [name] => 12721584942474_.pic_hd 1.jpg                                     [type] => image/jpeg                                     [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpdvv8No                                     [error] => 0                                     [size] => 1156                                 )                          )                  )              [c] => Array                 (                     [0] => Array                         (                             [name] => 12731584942474_.pic_hd.jpg                             [type] => image/jpeg                             [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/php9tfGmp                             [error] => 0                             [size] => 6068                         )                  )              [1] => Array                 (                     [name] => background1.jpg                     [type] => image/jpeg                     [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phplUVpzA                     [error] => 0                     [size] => 393194                 )              [2] => Array                 (                     [0] => Array                         (                             [name] => adliu_pip_data.xlsx                             [type] => application/vnd.openxmlformats-officedocument.spreadsheetml.sheet                             [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpNRtiaC                             [error] => 0                             [size] => 36714                         )                  )          )      [newfile] => Array         (             [0] => Array                 (                     [0] => Array                         (                             [name] => 數(shù)據(jù)列表 (2).xlsx                             [type] => application/vnd.openxmlformats-officedocument.spreadsheetml.sheet                             [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpBLG7aG                             [error] => 0                             [size] => 77032                         )                  )              [s] => Array                 (                     [name] => background1.jpg                     [type] => image/jpeg                     [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpjyqCFY                     [error] => 0                     [size] => 393194                 )          )      [singlefile] => Array         (             [name] =>             [type] => image/jpeg             [tmp_name] => /private/var/folders/wj/t2z1cfhs0m9gq48krm8nc0vm0000gn/T/phpuYJXiE             [error] => 0             [size] => 10273         )  )

          和上面原始的 $_FILES 相比是不是清晰明了的很多?這回我們?nèi)绻枰?myfile[a][b][] 里面全部的內(nèi)容時,就可以使用下面的方式方便的獲取了:

          re class="brush:php;toolbar:false;">$files['myfile']['a']['b'][0]['name']; $files['myfile']['a']['b'][0]['type']; $files['myfile']['a']['b'][0]['tmp_name']; $files['myfile']['a']['b'][0]['error']; $files['myfile']['a']['b'][0]['size'];

          當然,這種需求在我們的日常工作中并不多見,這里也只是提供一個思路,將數(shù)據(jù)提前轉(zhuǎn)化成我們需要的格式是一種非常好的習慣,能夠讓我們的后續(xù)操作變得非常簡單。

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號