文件打包,下載之使用PHP自帶的ZipArchive壓縮文件并下載打包好的文件_第1頁(yè)
文件打包,下載之使用PHP自帶的ZipArchive壓縮文件并下載打包好的文件_第2頁(yè)
文件打包,下載之使用PHP自帶的ZipArchive壓縮文件并下載打包好的文件_第3頁(yè)
文件打包,下載之使用PHP自帶的ZipArchive壓縮文件并下載打包好的文件_第4頁(yè)
文件打包,下載之使用PHP自帶的ZipArchive壓縮文件并下載打包好的文件_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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í)候,并不需要先打開(kāi)文件,通過(guò)

2、filesize($filename)就可以看出,如果需要先打開(kāi)文件的話,filesize可能就會(huì)是這樣的形式了filesize($filehandle)3. 向客戶(hù)端回送數(shù)據(jù)的是,記得要設(shè)置一個(gè)buffer,用來(lái)指定每次向客戶(hù)端輸出多少數(shù)據(jù),如:$buffer=1023。如果不指定的話,就會(huì)將整個(gè)文件全部寫(xiě)入內(nèi)存當(dāng)中,再一次性的講數(shù)據(jù)傳送給客戶(hù)端4. 通過(guò)feof()函數(shù),可以判斷要讀取的文件是否讀完,如果還沒(méi)讀完,繼續(xù)讀取文件($file_data=fread(),并將數(shù)據(jù)回送給客戶(hù)端(echo $file_data)5. 每次下載完成后,在客戶(hù)端都會(huì)刷新下,說(shuō)明了,其實(shí)每次都將數(shù)據(jù)寫(xiě)入到

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類(lèi)a) 我們只需要new一個(gè)ZipArchive對(duì)象,然后使用open方法創(chuàng)建一個(gè)zip文件,接著使用addFile方法,將要打包的文件寫(xiě)入剛剛創(chuàng)建的zip文件中,最好還得記得關(guān)閉該對(duì)象。b) 注意

4、點(diǎn):使用open方法的時(shí)候,第二個(gè)參數(shù)$flags是可選的,$flags用來(lái)指定對(duì)打開(kāi)的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ù)器端的工作:-客戶(hù)端的瀏覽器發(fā)送一個(gè)請(qǐng)求到處理下載的php文件。注意:任何一個(gè)操作都首先需要寫(xiě)入到內(nèi)存當(dāng)中,不管是視頻、音頻還是文本文件,都需要先寫(xiě)入到內(nèi)存當(dāng)中。換句話說(shuō),將“服務(wù)器”上的文件讀入到“服務(wù)器”的內(nèi)存當(dāng)中的這個(gè)操作時(shí)必不可少的(注意:這里我將服務(wù)器三個(gè)字加上雙引號(hào),主要是說(shuō)明這一系類(lèi)的操作時(shí)在服務(wù)器上完成的)。<br&g

7、t;既然要將文件寫(xiě)入到內(nèi)存當(dāng)中,就必然要先將文件打開(kāi)所以這里就需要三個(gè)文件操作的函數(shù)了:一:fopen($filename ,$mode)二:fread ( int $handle , int $length )三:fclose ( resource $handle )-客戶(hù)端端的工作:-那么,如何將已經(jīng)存在于服務(wù)器端內(nèi)存當(dāng)中的文件信息流,傳給客戶(hù)端呢?答案是通過(guò)header()函數(shù),客戶(hù)端就知道該如何處理文件,是保存還是打開(kāi)等等 最終的效果如下圖所示:  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 /打開(kāi)文件33 $file = fopen($this->_filepath,"r");34 /返回的文件類(lèi)型35 Header("Content-type: application/octet-stream");36 /按照字節(jié)大小返回37 Header("Accept-Ranges: bytes");38 /返回文件的大小39 Header("Accept-Length: ".filesize($this->_filepath);40 /這里對(duì)客戶(hù)端的彈出對(duì)話框,對(duì)應(yīng)的文件名41 He

15、ader("Content-Disposition: attachment; filename=".$this->_filename);42 /修改之前,一次性將數(shù)據(jù)傳輸給客戶(hù)端43 echo fread($file, filesize($this->_filepath);44 /修改之后,一次只傳輸1024個(gè)字節(jié)的數(shù)據(jù)給客戶(hù)端45 /向客戶(hù)端回送數(shù)據(jù)46 $buffer=1024;/47 /判斷文件是否讀完48 while (!feof($file) 49 /將文件讀入內(nèi)存50 $file_data=fread($file,$buffer);51 /每次向客戶(hù)

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>名稱(chēng)</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)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論