php實現文件上傳與下載(上)

php實現文件的上傳與下載是一個挺基本的功能,一般網站多多少少都會有這樣的需求在內,當然不是說所有的文件都可以被上傳,那這網絡就太沒有安全性可言瞭。因為接觸php時間不長,今天寫練練手,隨筆也就是公開記錄而已啦。

 

文件上傳:也就是將客戶端的文件上傳到伺服器端,在將伺服器端的臨時文件移動到指定目錄即可。主要思維就是先定義獲取$_FILES中的二維數組變量,可以每次都用二維數組獲取,也可以將第一維的放入一個數組變量中,然後每次獲取該數組變量中的值,簡化代碼量—-> 判斷錯誤號是否為0或者是UPLOAD_ERR_OK為真時表示沒有錯誤,可以上傳—–>將伺服器上的臨時文件移動到我們的指定目錄下,叫什麼名字,移動成功返回true,用move_uploaded_file($臨時文件名,$目的地)—–>另外一種方式就是用copy($臨時變量名,$目的地)函數;

 

$_FILES中保存這兒上傳文件的信息,這是一個二維數組,第一維當然就是上傳進來的文件的名稱瞭,第二維就是該文件的相關信息瞭,上傳之後就可以打印該數組中的參數進行查看—用print_r($_FILES),可以看到裡邊的內容有:

name:上傳文件的名稱;

type:上傳文件的MIME類型;

tmp_name:上傳到伺服器上的臨時文件名;//很重要的,因為以後在伺服器上操縱的就是這個文件

size:上傳文件的大小;

error:上傳文件的錯誤號,成功為0,。

伺服器端配置—php.ini:

 

file_uploads=on,支持http上傳;

upload_tmp_dir=,臨時文件保存的目錄;

upload_max_filesize=  2M ;允許上傳文件的大小;

max_file_uploads=20; 允許一次上傳文件數目,默認為20;

max_execution_time=-1;設置腳本被解析終止之前允許的最大執行秒數,防止程式太差(例如死循環)而占盡伺服器資源;

max_input_time=60;腳本解析輸入數據允許的最大秒數;

max_input_nesting_level=64,設置輸入變量的嵌套深度;

max_input_vars=60;接受多少輸入的變量,減輕dos攻擊的可能性,如果超過指定數量的變量,將會導致E_WARNING的產生,更多的輸入變量將會從請求中截斷;

memory_limit=128M。最大單線程的獨立內存使用量,也就是一個web請求,給予線程的最大內存使用量的定義。

還有一些錯誤信息說明,基本都是英文的字面意思,找不見臨時目錄啊大小超過限制啊之類的共8中錯誤信息,分別對應數字0-8但是沒有數字5,在代碼裡進行判定輸出,按照一一對應的,可以用switch……case,共7個case(0表示成功就不用寫瞭)來表示輸出錯誤信息。在代碼中進行判定,如果沒錯誤輸出的話,就進行上傳操作。

 

客戶端的一些配置—但是在客戶端的配置很多時候並不能真正起到限制作用,真正想限制都是要配置在服務端的:

 

通過表單隱藏域限制上傳文件的最大值    <input type="hidden" name="MAX_FILE_SIZE" value="字節數" />

通過accept屬性限制上傳文件類型  <input type="file" name="myFile" accept="文件的MIME類型" />

在這個練手的過程中,我沒有認識到一點,form表單最大上傳限制(程式中的判定)和底層php的判定(php.ini中),因此如果我表單的最大上傳限制為2M,而php.ini中的判定是10M,這樣在我上傳文件大小超過10M時肯定就直接提示代碼錯誤,而當上傳文件大小介於2M和10M之間時,程式可以執行,按照判定輸出對應的錯誤信息。

You May Also Like