文件上傳

閱讀原文

一:文件上傳需要注意php.ini文件


  • /etc/php.ini 的配置選項(xiàng)有很多,查找設(shè)置即可
配置項(xiàng) 功能說明
file_upload On為開始文件上傳功能,off為關(guān)閉
post_max_size 系統(tǒng)允許的POST傳參的最大值
upload_max_filesize 系統(tǒng)允許的上傳文件的最大值
memory_limit 內(nèi)存使用限制

建議尺寸 : file_size(文件大小) < upload_max_filesize < post_max_size < memory_limit

另外,需要注意的是腳本執(zhí)行時間。

max_execution_time,單位為秒。這個參數(shù)是設(shè)定腳本的最大執(zhí)行時間。也可以根據(jù)需求做適當(dāng)?shù)母淖?,通常不需要來修改,系統(tǒng)默認(rèn)即可。超大文件上傳的時候,可能會涉及到這一參數(shù)的修改。

上傳時間太長,會超時。如果你將此參數(shù)設(shè)置為0,則是不限制超時時間,不建議使用。

完成了php.ini的相關(guān)配置,我們就可以開始試著完成第一次文件上傳了。

二:文件上傳的步驟


系統(tǒng)返回的錯誤碼詳解

1、判斷是否有錯誤碼

錯誤碼 說明
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

2、自定義判斷是否超出文件大小范圍

在開發(fā)上傳功能時,除了php.ini中規(guī)定的上傳的最大值外,我們通常還會設(shè)定一個值,是業(yè)務(wù)規(guī)定的上傳大小限制。

例如:

新浪微博或者QQ空間只準(zhǔn)單張頭像圖片2M。而在上傳圖冊的時候又可以超過2M來上傳。

所以說,系統(tǒng)是支持更大文件上傳的。

此處的判斷文件大小,我們用于限制實(shí)際業(yè)務(wù)中我們想要規(guī)定的上傳的文件大小。

3、判斷后綴名和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)

4、生成文件名

我們的文件上傳成功了,不會讓它保存原名,因?yàn)?,有些人在原名中有敏感關(guān)鍵詞會違反我國的相關(guān)法律和法規(guī)。

我們可以采用date()mt_rand()或者unique()生產(chǎn)隨機(jī)的文件名。

5、判斷是否是上傳文件

文件上傳成功后,系統(tǒng)會將上傳的臨時文件上傳到系統(tǒng)的臨時目錄中,產(chǎn)生一個臨時文件。

同時會產(chǎn)生臨時文件名。我們需要做的事情是將臨時文件移動到系統(tǒng)指定的目錄中。

而移動前不能瞎移動,或者移動錯了都是不科學(xué)的。移動前我們需要使用相關(guān)函數(shù)判斷上傳的文件是不是臨時文件。

is_uploaded_file()傳入一個參數(shù)($_FILES中的緩存文件名),判斷傳入的名稱是不是上傳文件。

6、移動臨時文件到指定位置

臨時文件是真實(shí)的臨時文件,我們需要將其移動到我們的網(wǎng)站目錄下面。

讓我們網(wǎng)站目錄的數(shù)據(jù),其他人可以訪問到。

我們使用:move_uploaded_file()
這個函數(shù)是將上傳文件移動到指定位置,并命名。

傳入兩個參數(shù):

第一個參數(shù)是指定移動的上傳文件;

第二個參數(shù)是指定的文件夾和名稱拼接的字符串。

三:文件上傳表單注意事項(xiàng)


1、form表單中的method必須為post,若為get是無法進(jìn)行文件上傳的。

2、enctype必須為multipart/form-data

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容