$_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.