今天給大家介紹的是PHP文件的上傳與下載,分為兩部分屁倔,第一部分:文件的上傳梁丘,第二部分:文件的下載燕偶;
一.文件的上傳
原理:將客戶端的文件上傳到服務(wù)器端喝噪,在將服務(wù)器端的臨時(shí)文件移動(dòng)到指定目錄即可。
客戶端:準(zhǔn)備一個(gè)表單頁(yè)面指么,表單的發(fā)送方式為post酝惧,并且添加enctype="multipart/form-data",記住:發(fā)送方式一定為post伯诬,并且form里面一定要添加enctype="multipart/form-data",兩者缺一不可晚唇。
以下為客戶端的簡(jiǎn)單實(shí)現(xiàn)代碼:
服務(wù)器:用PHP預(yù)定義變量$_FILES來(lái)接收傳過(guò)來(lái)文件,以下為客戶端接收頁(yè)面的截圖:
$_FILES變量解析,以下為截圖:
數(shù)組解析:myfile為表單提交頁(yè)面自定義的name盗似;name為上傳文件的名字哩陕;type為上傳文件的原始名稱;tmp_name為上傳文件的臨時(shí)保存文件的位置;error為上傳文件的錯(cuò)誤信息悍及;size為上傳文件的大忻銎啊;
服務(wù)端保存文件的兩種方式:
第一種:通過(guò)move_uploaded_file($tmp_name,$filename)函數(shù)實(shí)現(xiàn),以下為截圖:
第二種:通過(guò)copy()函數(shù)實(shí)現(xiàn)心赶,以下為截圖:
文件上傳常規(guī)配置解析扣讼,這些配置選項(xiàng)都在php.ini文件中,以下為截圖:
文件上傳的其他配置解析缨叫,以下為截圖:
上傳文件錯(cuò)誤信息說(shuō)明椭符,以下為截圖:
客戶端上傳文件限制,以下為截圖:
服務(wù)器端上傳文件限制(單文件上傳實(shí)例):以下為截圖:
二.文件的下載
文件的下載一種是可以通過(guò)表單的超鏈接方式實(shí)現(xiàn)耻姥,這個(gè)主要是實(shí)現(xiàn)瀏覽器不識(shí)別的文件類型销钝,例如:
對(duì)于一些瀏覽器識(shí)別的文件,比如圖片琐簇,視頻來(lái)說(shuō)就要通過(guò)PHP代碼來(lái)實(shí)現(xiàn)了蒸健,以下為實(shí)現(xiàn)過(guò)程:
上面的這種方式雖然實(shí)現(xiàn)了文件的下載,但是也是有他的缺陷性的鸽嫂,比如不能批量下載纵装,而且下載完之后瀏覽器的頁(yè)面會(huì)跳轉(zhuǎn),嚴(yán)重影響我們的業(yè)務(wù)据某,下面的這種方式就解決了這個(gè)問(wèn)題。
<?php
/**
*@params string $url 要下載的文件地址
*@params string $filePath 要保存的文件位置
*/
function downFile($url,$filePath){
? if($url=='' || $url==NULL){
? ? ? ? return "下載地址不能為空";
? }
? $ext_name = strrchr($url,'.');//獲取文件的擴(kuò)展名
? ob_start();//打開(kāi)輸出緩沖區(qū)诗箍,所有的輸出信息不在發(fā)送給瀏覽器癣籽,保存在緩沖區(qū)
? readfile($url);//將文件寫(xiě)入到緩沖區(qū)
? $file_data = ob_get_contents();//獲取緩沖區(qū)文件內(nèi)容,內(nèi)容為二進(jìn)制
? $filename = "./".$filePath.time().$ext_name;//構(gòu)建保存文件位置
? ob_end_clean();//清空緩沖區(qū)
? $local_file = fopen($filename,'a');//打開(kāi)文件
? $fwrite($local_file,$file_data);//將內(nèi)容寫(xiě)入文件
? fclose($local_file);//關(guān)閉文件
}
通過(guò)這個(gè)函數(shù)滤祖,我們就可以輕松實(shí)現(xiàn)文件的下載筷狼,而且我們可以循環(huán)調(diào)用來(lái)實(shí)現(xiàn)批量下載。