




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、總結(jié): 1. 使用PHP下載文件的操作需要給出四個(gè)header(),可以參考我的另一篇博文:PHP如何實(shí)現(xiàn)下載功能超詳細(xì)流程分析2. 計(jì)算文件的大小的時(shí)候,并不需要先打開文件,通過(guò)
2、filesize($filename)就可以看出,如果需要先打開文件的話,filesize可能就會(huì)是這樣的形式了filesize($filehandle)3. 向客戶端回送數(shù)據(jù)的是,記得要設(shè)置一個(gè)buffer,用來(lái)指定每次向客戶端輸出多少數(shù)據(jù),如:$buffer=1023。如果不指定的話,就會(huì)將整個(gè)文件全部寫入內(nèi)存當(dāng)中,再一次性的講數(shù)據(jù)傳送給客戶端4. 通過(guò)feof()函數(shù),可以判斷要讀取的文件是否讀完,如果還沒讀完,繼續(xù)讀取文件($file_data=fread(),并將數(shù)據(jù)回送給客戶端(echo $file_data)5. 每次下載完成后,在客戶端都會(huì)刷新下,說(shuō)明了,其實(shí)每次都將數(shù)據(jù)寫入到
3、一個(gè)臨時(shí)文件中,等全部下載完成后,再將所有的數(shù)據(jù)重新整合在一起6. 這里我使用的是絕對(duì)路徑,絕對(duì)路徑有個(gè)好處,就是適應(yīng)性比較強(qiáng),而且相對(duì)于相對(duì)路徑,效率更高(免去了查找文件的過(guò)程)分析下技術(shù)要點(diǎn): 1. 將文件打包成zip格式2. 下載文件的功能要點(diǎn)解析:1. 這里我采用的是php自帶的ZipArchive類a) 我們只需要new一個(gè)ZipArchive對(duì)象,然后使用open方法創(chuàng)建一個(gè)zip文件,接著使用addFile方法,將要打包的文件寫入剛剛創(chuàng)建的zip文件中,最好還得記得關(guān)閉該對(duì)象。b) 注意
4、點(diǎn):使用open方法的時(shí)候,第二個(gè)參數(shù)$flags是可選的,$flags用來(lái)指定對(duì)打開的zip文件的處理方式,共有四種情況 i. ZIPARCHIVE:OVERWRITE 總是創(chuàng)建一個(gè)新的文件,如果指定的zip文件存在,則會(huì)覆蓋掉
5、160; ii. ZIPARCHIVE:CREATE 如果指定的zip文件不存在,則新建一個(gè) iii. ZIPARCHIVE:EXCL 如果指定的zip文件存在,則會(huì)報(bào)錯(cuò)
6、 iv. ZIPARCHIVE:CHECKCONS 下載文件的流程: 服務(wù)器端的工作:-客戶端的瀏覽器發(fā)送一個(gè)請(qǐng)求到處理下載的php文件。注意:任何一個(gè)操作都首先需要寫入到內(nèi)存當(dāng)中,不管是視頻、音頻還是文本文件,都需要先寫入到內(nèi)存當(dāng)中。換句話說(shuō),將“服務(wù)器”上的文件讀入到“服務(wù)器”的內(nèi)存當(dāng)中的這個(gè)操作時(shí)必不可少的(注意:這里我將服務(wù)器三個(gè)字加上雙引號(hào),主要是說(shuō)明這一系類的操作時(shí)在服務(wù)器上完成的)。<br&g
7、t;既然要將文件寫入到內(nèi)存當(dāng)中,就必然要先將文件打開所以這里就需要三個(gè)文件操作的函數(shù)了:一:fopen($filename ,$mode)二:fread ( int $handle , int $length )三:fclose ( resource $handle )-客戶端端的工作:-那么,如何將已經(jīng)存在于服務(wù)器端內(nèi)存當(dāng)中的文件信息流,傳給客戶端呢?答案是通過(guò)header()函數(shù),客戶端就知道該如何處理文件,是保存還是打開等等 最終的效果如下圖所示: 1 <?php 2 require'./download.php' 3 /* 4 * 遍歷目錄,
8、打包成zip格式 5 */ 6 class traverseDir 7 public $currentdir;/當(dāng)前目錄 8 public $filename;/文件名 9 public $fileinfo;/用于保存當(dāng)前目錄下的所有文件名和目錄名以及文件大小10 public function _construct()11 $this->currentdir=getcwd();/返回當(dāng)前目錄12 13 /遍歷目錄14 public function scandir($filepath)15 if (is_dir($filepath)16 $arr=scandir($filepath);
9、17 foreach ($arr as $k=>$v)18 $this->fileinfo$v=$this->getfilesize($v);19 20 else 21 echo "<script>alert('當(dāng)前目錄不是有效目錄');</script>"22 23 24 /*25 * 返回文件的大小26 *27 * param string $filename 文件名28 * return 文件大小(KB)29 */30 public function getfilesize($fname)31 return f
10、ilesize($fname)/1024;32 33 34 /*35 * 壓縮文件(zip格式)36 */37 public function tozip($items) 38 $zip=new ZipArchive();39 $zipname=date('YmdHis',time();40 if (!file_exists($zipname)41 $zip->open($zipname.'.zip',ZipArchive:OVERWRITE);/創(chuàng)建一個(gè)空的zip文件42 for ($i=0;$i<count($items);$i+)43 $zip
11、->addFile($this->currentdir.'/'.$items$i,$items$i);44 45 $zip->close();46 $dw=new download($zipname.'.zip'); /下載文件47 $dw->getfiles();48 unlink($zipname.'.zip'); /下載完成后要進(jìn)行刪除 49 50 51 52 ?> 1 <?php 2 /* 3 * 下載文件 4 * 5 */ 6 class download 7 pr
12、otected $_filename; 8 protected $_filepath; 9 protected $_filesize;/文件大小10 public function _construct($filename)11 $this->_filename=$filename;12 $this->_filepath=dirname(_FILE_).'/'.$filename;13 14 /獲取文件名15 public function getfilename()16 return $this->_filename;17 18 19 /獲取文件路徑(包含文
13、件名)20 public function getfilepath()21 return $this->_filepath;22 23 24 /獲取文件大小25 public function getfilesize()26 return $this->_filesize=number_format(filesize($this->_filepath)/(1024*1024),2);/去小數(shù)點(diǎn)后兩位27 28 /下載文件的功能29 public function getfiles()30 /檢查文件是否存在31 if (file_exists($this->_filep
14、ath)32 /打開文件33 $file = fopen($this->_filepath,"r");34 /返回的文件類型35 Header("Content-type: application/octet-stream");36 /按照字節(jié)大小返回37 Header("Accept-Ranges: bytes");38 /返回文件的大小39 Header("Accept-Length: ".filesize($this->_filepath);40 /這里對(duì)客戶端的彈出對(duì)話框,對(duì)應(yīng)的文件名41 He
15、ader("Content-Disposition: attachment; filename=".$this->_filename);42 /修改之前,一次性將數(shù)據(jù)傳輸給客戶端43 echo fread($file, filesize($this->_filepath);44 /修改之后,一次只傳輸1024個(gè)字節(jié)的數(shù)據(jù)給客戶端45 /向客戶端回送數(shù)據(jù)46 $buffer=1024;/47 /判斷文件是否讀完48 while (!feof($file) 49 /將文件讀入內(nèi)存50 $file_data=fread($file,$buffer);51 /每次向客戶
16、端回送1024個(gè)字節(jié)的數(shù)據(jù)52 echo $file_data;53 54 55 fclose($file);56 else 57 echo "<script>alert('對(duì)不起,您要下載的文件不存在');</script>"58 59 60 61 ?> 頁(yè)面顯示的代碼: 1 <script type="text/javascript" src="jquery-1.7.2.js"></script> 2 <script type=&qu
17、ot;text/javascript" src="ajax.js"></script> 3 <?php 4 header("Content-type:text/html;charset=utf8"); 5 require('./getfile.php'); 6 $scandir=new traverseDir(); 7 $scandir->scandir($scandir->currentdir); 8 $scandir->currentdir; 9 10 if (isset($_POS
18、T'down_load') 11 $items=$_POST'items'12 $scandir->tozip($items);/將文件壓縮成zip格式13 14 echo "當(dāng)前的工作目錄:".$scandir->currentdir;15 echo "<br>當(dāng)前目錄下的所有文件"16 ?>17 18 <form action="list.php" method="POST">19 <table>20 <tr>21 <td></td>22 <td>名稱</td>23 <td>大小(KB)</td>24 </tr>25 <?php26 $res=$scandir->fileinfo;27 foreach ($res as $k=>$v)28 if (!($k='.' | $k='.') /過(guò)濾掉.和.29 ?>30 <tr>31 <td>&l
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 禮儀用品企業(yè)環(huán)境保護(hù)責(zé)任考核試卷
- 周莊超深基坑施工方案
- 紙張加工中的涂布工藝改進(jìn)考核試卷
- 了解項(xiàng)目管理考試命題思路試題及答案
- 熱電聯(lián)產(chǎn)關(guān)鍵技術(shù)研究考核試卷
- 2025年【過(guò)氧化工藝】考試題及答案
- 海洋能源開發(fā)市場(chǎng)前景分析考核試卷
- 環(huán)保工程綠色交通設(shè)計(jì)與規(guī)劃考核試卷
- 高一物理綜合試題及答案
- 2023年中國(guó)神華煤制油化工有限公司第三批次系統(tǒng)內(nèi)招聘2人筆試參考題庫(kù)附帶答案詳解
- 2025中煤鄂爾多斯能源化工有限公司高校畢業(yè)生招聘98人筆試參考題庫(kù)附帶答案詳解
- 導(dǎo)游知識(shí)培訓(xùn)課件
- 眼科“一科一品”特色護(hù)理服務(wù)
- 銀行內(nèi)控案防警示教育
- 初中勞動(dòng)測(cè)試題及答案
- 基因指導(dǎo)蛋白質(zhì)的合成課件-高一下學(xué)期生物人教版必修22
- 2024-2025學(xué)年湖南省長(zhǎng)沙市八年級(jí)(上)期末物理試卷(含解析)
- 西師大版小學(xué)五年級(jí)數(shù)學(xué)(下)期中測(cè)試題(1-4單元)(2)(含答案)
- 2025-2030中國(guó)鍍鋅鋼板行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 大模型備案-落實(shí)算法安全主體責(zé)任基本情況
- 2025《四川省建設(shè)工程施工總包合同》示范文本
評(píng)論
0/150
提交評(píng)論