php實(shí)現(xiàn)文件的上傳與下載是一個(gè)挺基本的功能,一般網(wǎng)站多多少少都會(huì)有這樣的需求在內(nèi),當(dāng)然不是說所有的文件都可以被上傳,那這網(wǎng)絡(luò)就太沒有安全性可言了。因?yàn)榻佑|php時(shí)間不長(zhǎng),今天寫練練手,隨筆也就是公開記錄而已啦。
文件上傳:也就是將客戶端的文件上傳到服務(wù)器端,在將服務(wù)器端的臨時(shí)文件移動(dòng)到指定目錄即可。主要思維就是先定義獲取$_FILES中的二維數(shù)組變量,可以每次都用二維數(shù)組獲取,也可以將第一維的放入一個(gè)數(shù)組變量中,然后每次獲取該數(shù)組變量中的值,簡(jiǎn)化代碼量----> 判斷錯(cuò)誤號(hào)是否為0或者是UPLOAD_ERR_OK為真時(shí)表示沒有錯(cuò)誤,可以上傳----->將服務(wù)器上的臨時(shí)文件移動(dòng)到我們的指定目錄下,叫什么名字,移動(dòng)成功返回true,用move_uploaded_file($臨時(shí)文件名,$目的地)----->另外一種方式就是用copy($臨時(shí)變量名,$目的地)函數(shù);
$_FILES中保存這兒上傳文件的信息,這是一個(gè)二維數(shù)組,第一維當(dāng)然就是上傳進(jìn)來的文件的名稱了,第二維就是該文件的相關(guān)信息了,上傳之后就可以打印該數(shù)組中的參數(shù)進(jìn)行查看---用print_r($_FILES),可以看到里邊的內(nèi)容有:name:上傳文件的名稱;type:上傳文件的MIME類型;tmp_name:上傳到服務(wù)器上的臨時(shí)文件名;//很重要的,因?yàn)橐院笤诜?wù)器上操縱的就是這個(gè)文件size:上傳文件的大小;error:上傳文件的錯(cuò)誤號(hào),成功為0,。服務(wù)器端配置---php.ini:
file_uploads=on,支持http上傳;upload_tmp_dir=,臨時(shí)文件保存的目錄;upload_max_filesize= 2M;允許上傳文件的大小;max_file_uploads=20; 允許一次上傳文件數(shù)目,默認(rèn)為20;max_execution_time=-1;設(shè)置腳本被解析終止之前允許的最大執(zhí)行秒數(shù),防止程序太差(例如死循環(huán))而占盡服務(wù)器資源;max_input_time=60;腳本解析輸入數(shù)據(jù)允許的最大秒數(shù);max_input_nesting_level=64,設(shè)置輸入變量的嵌套深度;max_input_vars=60;接受多少輸入的變量,減輕dos攻擊的可能性,如果超過指定數(shù)量的變量,將會(huì)導(dǎo)致E_WARNING的產(chǎn)生,更多的輸入變量將會(huì)從請(qǐng)求中截?cái)啵籱emory_limit=128M。最大單線程的獨(dú)立內(nèi)存使用量,也就是一個(gè)web請(qǐng)求,給予線程的最大內(nèi)存使用量的定義。還有一些錯(cuò)誤信息說明,基本都是英文的字面意思,找不見臨時(shí)目錄啊大小超過限制啊之類的共8中錯(cuò)誤信息,分別對(duì)應(yīng)數(shù)字0-8但是沒有數(shù)字5,在代碼里進(jìn)行判定輸出,按照一一對(duì)應(yīng)的,可以用switch……case,共7個(gè)case(0表示成功就不用寫了)來表示輸出錯(cuò)誤信息。在代碼中進(jìn)行判定,如果沒錯(cuò)誤輸出的話,就進(jìn)行上傳操作。
客戶端的一些配置---但是在客戶端的配置很多時(shí)候并不能真正起到限制作用:
通過表單隱藏域限制上傳文件的最大值 <input type="hidden" name="MAX_FILE_SIZE" html' target='_blank'>value="字節(jié)數(shù)" />通過accept屬性限制上傳文件類型 <input type="file" name="myFile" accept="文件的MIME類型" />PHP編程鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選