php文件上傳的步驟
文件上傳的步驟
為了更好的學(xué)習(xí)PHP,我們將極為復(fù)雜的PHP的文件上傳歸納總結(jié)成為了6個步驟。
在實(shí)際使用過程中,你按照這6個步驟就能夠很好的完成PHP的文件上傳:
一、判斷是否有錯誤碼
系統(tǒng)返回的錯誤碼詳解:
錯誤碼 | 說明 |
---|---|
0 | 無誤,可以繼續(xù)進(jìn)行文件上傳的后續(xù)操作。 |
1 | 超出上傳文件的最大限制,upload_max_filesize = 2M php.ini中設(shè)置,一般默認(rèn)為2M??筛鶕?jù)項(xiàng)目中的實(shí)際需要來修改 |
2 | 超出了指定的文件大小,根據(jù)項(xiàng)目的業(yè)務(wù)需求指定上傳文件的大小限制 |
3 | 只有部分文件被上傳 |
4 | 文件沒有被上傳 |
6 | 找不到臨時文件夾,可能目錄不存在或沒權(quán)限 |
7 | 文件寫入失敗,可能磁盤滿了或沒有權(quán)限 |
注:錯誤碼中沒有5。
二、自定義判斷是否超出文件大小范圍
在開發(fā)上傳功能時。我們作為開發(fā)人員,除了php.ini中規(guī)定的上傳的最大值外。
我們通常還會設(shè)定一個值,是業(yè)務(wù)規(guī)定的上傳大小限制。
例如:
新浪微博或者QQ空間只準(zhǔn)單張頭像圖片2M。而在上傳圖冊的時候又可以超過2M來上傳。
所以說,它的系統(tǒng)是支持更大文件上傳的。
此處的判斷文件大小,我們用于限制實(shí)際業(yè)務(wù)中我們想要規(guī)定的上傳的文件大小。
三、判斷后綴名和mime類型是否符合
在網(wǎng)絡(luò)世界里面也有壞人。他們會把圖片插入病毒,在附件中上傳病毒,他們會在網(wǎng)頁中插入病毒或者黃色圖片。
我們需要對于上傳的文件后綴和mime類型都要進(jìn)行判斷才可以。
MIME(Multipurpose Internet Mail Extensions)是多用途互聯(lián)網(wǎng)郵件擴(kuò)展類型。是設(shè)定某種擴(kuò)展名的文件用一種應(yīng)用程序來打開的方式類型,當(dāng)該擴(kuò)展名文件被訪問的時候,瀏覽器會自動使用指定應(yīng)用程序來打開。多用于指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。
在判斷后綴和MIME類型的時候,我們會用到PHP的一個函數(shù)in_array(),該函數(shù)傳入兩個參數(shù)。
第一個參數(shù)是要判斷的值;
第二個參數(shù)是范圍數(shù)組。
我們用這個函數(shù)來判斷文件的后綴名和mime類型是否在允許的范圍內(nèi)。
四、生成文件名
我們的文件上傳成功了,不會讓它保存原名。
因?yàn)椋行┤嗽谠杏忻舾嘘P(guān)鍵詞會違反我國的相關(guān)法律和法規(guī)。
我們可以采用date()、mt_rand()或者unique()生成隨機(jī)的文件名。
五、判斷是否是上傳文件
文件上傳成功時,系統(tǒng)會將上傳的臨時文件上傳到系統(tǒng)的臨時目錄中。產(chǎn)生一個臨時文件。
同時會產(chǎn)生臨時文件名。我們需要做的事情是將臨時文件移動到系統(tǒng)的指定目錄中。
而移動前不能瞎移動,或者移動錯了都是不科學(xué)的。移動前我們需要使用相關(guān)函數(shù)判斷上傳的文件是不是臨時文件。
is_uploaded_file()傳入一個參數(shù)($_FILES中的緩存文件名),判斷傳入的名稱是不是上傳文件。
六、移動臨時文件到指定位置
臨時文件是真實(shí)的臨時文件,我們需要將其移動到我們的網(wǎng)站目錄下面了。
讓我們網(wǎng)站目錄的數(shù)據(jù),其他人可以訪問到。
我們使用:move_uploaded_file()。
這個函數(shù)是將上傳文件移動到指定位置,并命名。
傳入兩個參數(shù):
第一個參數(shù)是指定移動的上傳文件;
第二個參數(shù)是指定的文件夾和名稱拼接的字符串。