原理
文件上傳:文件從用戶本地電腦通過(guò)傳輸方式(web表單)保存到服務(wù)器所在電腦指定的目錄下瑟慈。
1桃移、增加文件上傳表單:瀏覽器請(qǐng)求一個(gè)服務(wù)器的html腳本(包括文件上傳表單)。
2葛碧、用戶從本地選擇一個(gè)文件(點(diǎn)擊上傳按鈕)借杰。
3、用戶點(diǎn)擊上傳:文件會(huì)通過(guò)物聯(lián)網(wǎng)傳說(shuō)服務(wù)器上进泼。
4蔗衡、服務(wù)器操作系統(tǒng)將文件保存到臨時(shí)目錄:以臨時(shí)文件格式保存(win下tmp)。
5乳绕、服務(wù)器腳本開(kāi)始工作:判斷文件有效绞惦。
6、服務(wù)器腳本將有效文件從臨時(shí)目錄移動(dòng)到指定目錄下洋措。
表單寫(xiě)法
1)method屬性:必須為POST
2)enctype屬性:規(guī)范表單數(shù)據(jù)的編碼方式 multipart/form-data
3)上傳表單:file表單
在PHP中济蝉,有一個(gè)預(yù)定義變量$_FILES是專門(mén)用來(lái)存儲(chǔ)用戶上傳的文件的。
$_FILES 變量詳解
1)name:文件在用戶電腦上實(shí)際名字菠发。(實(shí)際用來(lái)保留后綴)
2)tmp_name:文件上傳服務(wù)器后操作系統(tǒng)保存的臨時(shí)文件名王滤。(實(shí)際用來(lái)給PHP后期使用)
3)type:MIME類型,用來(lái)在計(jì)算機(jī)客戶端識(shí)別文件類型雷酪。(確定軟件)
4)error:文件上傳的代號(hào)淑仆,用來(lái)告知php,文件接收過(guò)程中出現(xiàn)的問(wèn)題哥力。(PHP后期根據(jù)代碼進(jìn)行文件判斷)
(0沒(méi)有錯(cuò)誤蔗怠;1,2文件超過(guò)指定大卸胀洹;3文件只有部分上傳 網(wǎng)絡(luò)不穩(wěn)定造成寞射;4沒(méi)有上傳 用戶沒(méi)選中文件渔工;6找不到臨時(shí)文件;7寫(xiě)入失敗桥温。)
5)size:文件大小引矩。(PHP根據(jù)實(shí)際需求來(lái)確定是否保留)
移動(dòng)臨時(shí)文件到目標(biāo)位置
1)判斷是否為上傳文件:is_uploaded_file()
2)移動(dòng)文件:move_uploaded_file()
多文件上傳
當(dāng)商品需要上傳多個(gè)圖片進(jìn)行展示的時(shí)候(針對(duì)一個(gè)內(nèi)容但是不同文件說(shuō)明:同名表單);
需要多個(gè)維度圖片說(shuō)明的時(shí)候侵浸,需要使用多文件上傳旺韭。(針對(duì)不同內(nèi)容所以表單名字不一樣:批量解決問(wèn)題)
多文件上傳的$_FILES變量的數(shù)據(jù)結(jié)構(gòu)形式
批量上傳:
同名表單
不同名表單:
對(duì)多文件信息的遍歷讀取和處理
1、不同名多文件上傳處理方式:通過(guò)遍歷$_FILES數(shù)組掏觉,挨個(gè)取出來(lái)實(shí)現(xiàn)文件上傳
2区端、同名多文件上傳:想辦法得到一個(gè)文件對(duì)應(yīng)的五個(gè)元素?cái)?shù)組。從$_FILES中把對(duì)應(yīng)的name\tmp_name\size\error\type挨個(gè)取出來(lái)澳腹,然后存放到不同的數(shù)組中织盼。
文件上傳后續(xù)問(wèn)題
條件判斷:
需要上傳的文件信息
1、文件類型是否合適
2酱塔、文件存儲(chǔ)到什么位置
3沥邻、文件格式限制(文件后綴)
4、文件大小限制
結(jié)果:
1羊娃、成功:結(jié)果能夠在以后看到:需要將文件的路徑和文件名字返回(存儲(chǔ)到數(shù)據(jù)庫(kù))
2唐全、失敗:返回false迁沫,制定錯(cuò)誤原因(引用參數(shù))
1)封裝一個(gè)上傳函數(shù)
2)判斷文件是否有效
3)判斷保存路徑有效
4)判斷文件本身上傳過(guò)程是否出錯(cuò)
5)文件類型的處理
6)文件格式處理:后綴名的問(wèn)題
7)判斷當(dāng)前文件大小是否滿足當(dāng)前需求
8)移動(dòng)到指定目錄
9)命名沖突的處理:上傳同名文件芦瘾?中文名字文件怎么辦?
全部代碼:https://paste.ubuntu.com/p/M89SzqvJrx/