PHP上傳檔案

104828720發表於2019-02-16

$_FILES何時為空陣列?

  • 表單提交 enctype 不等於 multipart/form-data 的時候
  • php.ini配置檔案中,file_uploads = Off
  • 上傳的檔案大小 > php.ini配置檔案中所配置的最大上傳大小時

只要出現 $_FILES空陣列,就可能出現以上的問題,必須修復!


如果 未選擇任何檔案 就馬上點選 “上傳按鈕”,$_FILES將會是一個有元素的陣列,元素中的每個屬性都是空字串error屬性為4

單檔案上傳

  • $_FILES 資料結構
array(
    `filename` => array(
        `name` => `xxx.png`,
        `type` => `image/png`,
        `size` => 2548863,
        `tmp_name` => `/img/sdsdsd.png`,
        `error` => 0
    )
)

無論是單檔案還是多檔案上傳,都會有5個固定屬性:name / size / type / tmp_name / error

多檔案上傳

相比單檔案上傳多檔案上傳處理起來要複雜多了

  • 前端的兩種多檔案上傳形式
//name相同
<form method="post" enctype="multipart/form-data">
    <input type="file" name="wt[]"/>
    <input type="file" name="wt[]"/>
    <input type="submit" value="提交"/>
</form>

//name不同(簡單點)
<form method="post" enctype="multipart/form-data">
    <input type="file" name="wt"/>
    <input type="file" name="mmt"/>
    <input type="submit" value="提交"/>
</form>
  • 後端的 $_FILES 對應的資料結構不同
//name相同
array (size=1)
  `wt` => 
    array (size=5)
      `name` => 
        array (size=2)
          0 => string `新建文字文件 (2).txt` (length=26)
          1 => string `新建文字文件.txt` (length=22)
      `type` => 
        array (size=2)
          0 => string `text/plain` (length=10)
          1 => string `text/plain` (length=10)
      `tmp_name` => 
        array (size=2)
          0 => string `C:Windowsphp1D64.tmp` (length=22)
          1 => string `C:Windowsphp1D65.tmp` (length=22)
      `error` => 
        array (size=2)
          0 => int 0
          1 => int 0
      `size` => 
        array (size=2)
          0 => int 0
          1 => int 1820

//name不同(簡單點)
array (size=2)
  `wt` => 
    array (size=5)
      `name` => string `新建文字文件 (2).txt` (length=26)
      `type` => string `text/plain` (length=10)
      `tmp_name` => string `C:Windowsphp39C7.tmp` (length=22)
      `error` => int 0
      `size` => int 0
  `mmt` => 
    array (size=5)
      `name` => string `新建文字文件.txt` (length=22)
      `type` => string `text/plain` (length=10)
      `tmp_name` => string `C:Windowsphp39D8.tmp` (length=22)
      `error` => int 0
      `size` => int 1820

欄位Error用途

  • 值:1 上傳的檔案超過了 php.ini 中 upload_max_filesize 選項限制的值。
  • 值:2 上傳檔案的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
  • 值:3 檔案只有部分被上傳。
  • 值:4 沒有檔案被上傳。
  • 值:5 上傳檔案大小為0.

相關文章