国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php文件打包 下載之使用PHP自帶的ZipArchive壓縮文件并下載打包好的文件

php文件打包 下載之使用PHP自帶的ZipArchive壓縮文件并下載打包好的文件

2020-01-03 16:00PHP教程網 PHP教程

php文件打包 下載之使用PHP自帶的ZipArchive壓縮文件并下載打包好的文件

總結:                     

使用PHP下載文件的操作需要給出四個header(),可以參考我的另一篇博文:PHP如何實現下載功能超詳細流程分析 
計算文件的大小的時候,并不需要先打開文件,通過filesize($filename)就可以看出,如果需要先打開文件的話,filesize可能就會是這樣的形式了filesize($filehandle) 
向客戶端回送數據的是,記得要設置一個buffer,用來指定每次向客戶端輸出多少數據,如:$buffer=1023。如果不指定的話,就會將整個文件全部寫入內存當中,再一次性的講數據傳送給客戶端 
通過feof()函數,可以判斷要讀取的文件是否讀完,如果還沒讀完,繼續讀取文件($file_data=fread()),并將數據回送給客戶端(echo $file_data) 
每次下載完成后,在客戶端都會刷新下,說明了,其實每次都將數據寫入到一個臨時文件中,等全部下載完成后,再將所有的數據重新整合在一起 
這里我使用的是絕對路徑,絕對路徑有個好處,就是適應性比較強,而且相對于相對路徑,效率更高(免去了查找文件的過程) 
分析下技術要點:                              

文件打包成zip格式 

下載文件的功能 

要點解析: 

這里我采用的是php自帶的ZipArchive類 
    a) 我們只需要new一個ZipArchive對象,然后使用open方法創建一個zip文件,接著使用addFile方法,將要打包的文件寫入剛剛創建的zip文件中,最好還得記得關閉該對象。 

    b) 注意點:使用open方法的時候,第二個參數$flags是可選的,$flags用來指定對打開的zip文件的處理方式,共有四種情況 

  i. ZIPARCHIVE::OVERWRITE 總是創建一個新的文件,如果指定的zip文件存在,則會覆蓋掉 

ii. ZIPARCHIVE::CREATE 如果指定的zip文件不存在,則新建一個 

iii. ZIPARCHIVE::EXCL 如果指定的zip文件存在,則會報錯 

iv. ZIPARCHIVE::CHECKCONS 

下載文件的流程:                               

服務器端的工作: 

客戶端的瀏覽器發送一個請求到處理下載的php文件。 
注意:任何一個操作都首先需要寫入到內存當中,不管是視頻、音頻還是文本文件,都需要先寫入到內存當中。 
換句話說,將“服務器”上的文件讀入到“服務器”的內存當中的這個操作時必不可少的(注意:這里我將服務器三個字加上雙引號,主要是說明這一系類的操作時在服務器上完成的)。<br> 
既然要將文件寫入到內存當中,就必然要先將文件打開 
所以這里就需要三個文件操作的函數了: 
一:fopen($filename ,$mode) 
二:fread ( int $handle , int $length ) 
三:fclose ( resource $handle ) 

客戶端端的工作: 

那么,如何將已經存在于服務器端內存當中的文件信息流,傳給客戶端呢? 
答案是通過header()函數,客戶端就知道該如何處理文件,是保存還是打開等等 

最終的效果如下圖所示: 

php文件打包 下載之使用PHP自帶的ZipArchive壓縮文件并下載打包好的文件

復制代碼代碼如下:


<?php 
require'./download.php'; 
/** 
* 遍歷目錄,打包成zip格式 
*/ 
class traverseDir{ 
public $currentdir;//當前目錄 
public $filename;//文件名 
public $fileinfo;//用于保存當前目錄下的所有文件名和目錄名以及文件大小 
public function __construct(){ 
$this->currentdir=getcwd();//返回當前目錄 

//遍歷目錄 
public function scandir($filepath){ 
if (is_dir($filepath)){ 
$arr=scandir($filepath); 
foreach ($arr as $k=>$v){ 
$this->fileinfo[$v][]=$this->getfilesize($v); 

}else { 
echo "<script>alert('當前目錄不是有效目錄');</script>"; 


/** 
* 返回文件的大小 

* @param string $filename 文件名 
* @return 文件大小(KB) 
*/ 
public function getfilesize($fname){ 
return filesize($fname)/1024; 

/** 
* 壓縮文件(zip格式) 
*/ 
public function tozip($items){ 
$zip=new ZipArchive(); 
$zipname=date('YmdHis',time()); 
if (!file_exists($zipname)){ 
$zip->open($zipname.'.zip',ZipArchive::OVERWRITE);//創建一個空的zip文件 
for ($i=0;$i<count($items);$i++){ 
$zip->addFile($this->currentdir.'/'.$items[$i],$items[$i]); 

$zip->close(); 
$dw=new download($zipname.'.zip'); //下載文件 
$dw->getfiles(); 
unlink($zipname.'.zip'); //下載完成后要進行刪除 



?> 

 

復制代碼代碼如下:


<?php 
/** 
* 下載文件 

*/ 
class download{ 
protected $_filename; 
protected $_filepath; 
protected $_filesize;//文件大小 
public function __construct($filename){ 
$this->_filename=$filename; 
$this->_filepath=dirname(__FILE__).'/'.$filename; 

//獲取文件名 
public function getfilename(){ 
return $this->_filename; 


//獲取文件路徑(包含文件名) 
public function getfilepath(){ 
return $this->_filepath; 


//獲取文件大小 
public function getfilesize(){ 
return $this->_filesize=number_format(filesize($this->_filepath)/(1024*1024),2);//去小數點后兩位 

//下載文件的功能 
public function getfiles(){ 
//檢查文件是否存在 
if (file_exists($this->_filepath)){ 
//打開文件 
$file = fopen($this->_filepath,"r"); 
//返回的文件類型 
Header("Content-type: application/octet-stream"); 
//按照字節大小返回 
Header("Accept-Ranges: bytes"); 
//返回文件的大小 
Header("Accept-Length: ".filesize($this->_filepath)); 
//這里對客戶端的彈出對話框,對應的文件名 
Header("Content-Disposition: attachment; filename=".$this->_filename); 
//修改之前,一次性將數據傳輸給客戶端 
echo fread($file, filesize($this->_filepath)); 
//修改之后,一次只傳輸1024個字節的數據給客戶端 
//向客戶端回送數據 
$buffer=1024;// 
//判斷文件是否讀完 
while (!feof($file)) { 
//將文件讀入內存 
$file_data=fread($file,$buffer); 
//每次向客戶端回送1024個字節的數據 
echo $file_data; 


fclose($file); 
}else { 
echo "<script>alert('對不起,您要下載的文件不存在');</script>"; 



?> 


頁面顯示的代碼: 

復制代碼代碼如下:


<script type="text/javascript" src="jquery-1.7.2.js"></script> 
<script type="text/javascript" src="ajax.js"></script> 
<?php 
header("Content-type:text/html;charset=utf8"); 
require('./getfile.php'); 
$scandir=new traverseDir(); 
$scandir->scandir($scandir->currentdir); 
$scandir->currentdir; 

if (isset($_POST['down_load'])){ 
$items=$_POST['items']; 
$scandir->tozip($items);//將文件壓縮成zip格式 

echo "當前的工作目錄:".$scandir->currentdir; 
echo "<br>當前目錄下的所有文件"; 
?> 

<form action="list.php" method="POST"> 
<table> 
<tr> 
<td></td> 
<td>名稱</td> 
<td>大小(KB)</td> 
</tr> 
<?php 
$res=$scandir->fileinfo; 
foreach ($res as $k=>$v){ 
if (!($k=='.' || $k=='..')) {//過濾掉.和.. 
?> 
<tr> 
<td><input type="checkbox" name="items[]" class="filename" value="<?php echo $k;?>"></td> 
<td><?php echo $k; ?></td> 
<td><?php echo number_format($v[0],0); ?></td> 
</tr> 
<?php 


?> 
<tr> 
<td><input type="checkbox" id="selall"><label for="selall">全選</label></td> 
<td><input type="submit" name="down_load" value="打包并下載" id="tozip_tetttt"></td> 
</tr> 
</table> 
</form> 

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 色播久久 | 男女羞羞网站 | 在线国产一区 | 精品96久久久久久中文字幕无 | 黄色在线免费 | 91看视频| 一级做a爰片性色毛片精油 欧美中文字幕在线观看 | 精品无码三级在线观看视频 | 欧美精品国产精品 | 中文字幕av一区二区 | 日本免费三片免费观看 | 精品伊人| 日韩成人免费 | a毛片| 久久久精品综合 | 亚洲精品91 | 毛片免费观看网址 | 日韩av一区二区在线观看 | 久色视频在线观看 | 亚洲一区电影 | 免费看黄在线观看 | 精品国产一二三区 | 亚洲精品视频网站在线观看 | zzz444成人天堂7777 | 久草视频播放 | 日本激情视频一区二区三区 | 免费国产一区 | 日韩精品在线观看视频 | av免费观看网站 | 久久免费精品 | 日韩二区 | 中文字幕在线观看一区二区三区 | 大桥未久亚洲精品久久久强制中出 | 久久99亚洲精品 | 成人黄色在线 | 91视频原创 | 少妇久久久| 天堂va在线高清一区 | 成人看的免费视频 | 欧美日韩中文在线观看 | 成人在线小视频 |