使用PHP下載文件的操作需要給出四個(gè)header(),可以參考我的另一篇博文:PHP如何實(shí)現(xiàn)下載功能超詳細(xì)流程分析 計(jì)算文件的大小的時(shí)候,并不需要先打開文件,通過filesize($filen " /> 天美传媒在线完整免费观看网站,日本A级作爱片金瓶双艳,国产精品第1页

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

總結(jié):                    

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

將文件打包成zip格式

下載文件的功能

要點(diǎn)解析:

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

    b) 注意點(diǎn):使用open方法的時(shí)候,第二個(gè)參數(shù)$flags是可選的,$flags用來指定對(duì)打開的zip文件的處理方式,共有四種情況

  i. ZIPARCHIVE::OVERWRITE 總是創(chuàng)建一個(gè)新的文件,如果指定的zip文件存在,則會(huì)覆蓋掉

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

iii. ZIPARCHIVE::EXCL 如果指定的zip文件存在,則會(huì)報(bào)錯(cuò)

iv. ZIPARCHIVE::CHECKCONS

下載文件的流程:                              

服務(wù)器端的工作:

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

客戶端端的工作:

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

最終的效果如下圖所示:


復(fù)制代碼 代碼如下:
<?php
require'./download.php';
/**
* 遍歷目錄,打包成zip格式
*/
class traverseDir{
public $currentdir;//當(dāng)前目錄
public $filename;//文件名
public $fileinfo;//用于保存當(dāng)前目錄下的所有文件名和目錄名以及文件大小
public function __construct(){
$this->currentdir=getcwd();//返回當(dāng)前目錄
}
//遍歷目錄
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('當(dāng)前目錄不是有效目錄');</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);//創(chuàng)建一個(gè)空的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'); //下載完成后要進(jìn)行刪除
}
}
}
?>

復(fù)制代碼 代碼如下:
<?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);//去小數(shù)點(diǎn)后兩位
}
//下載文件的功能
public function getfiles(){
//檢查文件是否存在
if (file_exists($this->_filepath)){
//打開文件
$file = fopen($this->_filepath,"r");
//返回的文件類型
Header("Content-type: application/octet-stream");
//按照字節(jié)大小返回
Header("Accept-Ranges: bytes");
//返回文件的大小
Header("Accept-Length: ".filesize($this->_filepath));
//這里對(duì)客戶端的彈出對(duì)話框,對(duì)應(yīng)的文件名
Header("Content-Disposition: attachment; filename=".$this->_filename);
//修改之前,一次性將數(shù)據(jù)傳輸給客戶端
echo fread($file, filesize($this->_filepath));
//修改之后,一次只傳輸1024個(gè)字節(jié)的數(shù)據(jù)給客戶端
//向客戶端回送數(shù)據(jù)
$buffer=1024;//
//判斷文件是否讀完
while (!feof($file)) {
//將文件讀入內(nèi)存
$file_data=fread($file,$buffer);
//每次向客戶端回送1024個(gè)字節(jié)的數(shù)據(jù)
echo $file_data;
}

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

頁(yè)面顯示的代碼:
復(fù)制代碼 代碼如下:
<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 "當(dāng)前的工作目錄:".$scandir->currentdir;
echo "<br>當(dāng)前目錄下的所有文件";
?>

<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>

php技術(shù)php文件打包 下載之使用PHP自帶的ZipArchive壓縮文件并下載打包好的文件,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久99国产精品一区二区 | 国产高清视频a在线大全 | 99精品国产在热 | 女教师跟黑人男朋友激情过后 | 国产免费高清mv视频在线观看 | 免费观看视频成人国产 | 羽月希被黑人吃奶dasd585 | 国产乱辈通伦影片在线播放亚洲 | 成人网视频在线观看免费 | 美美哒高清在线播放8 | 成在线人免费视频 | 激情午夜307 | 北原夏美 快播 | 国产精品禁18久久久夂久 | 高h浪荡文辣文神奇宝贝 | 九九热这里只有精品视频免费 | 国产盗摄一区二区三区 | SM调教贱屁股眼哭叫求饶H | 中文无码熟妇人妻AV在线 | 国产精品乱码一区二区三 | 99视频这里只有精品国产 | 久久99视热频国只有精品 | 九九热精品在线观看 | 孕妇bbwbbwbbwbbw超清 | 出租屋交换人妻 全文 | 青青视频国产色偷偷 | 青青青草国产 | 耽美肉文 高h失禁 | 亚洲国产成人爱AV在线播放丿 | 久久精品99国产精品日本 | 大香伊蕉在人线国产97 | 511麻豆视传媒精品AV | 十九禁啊啪射视频在线观看 | 驯服有夫之妇HD中字日本 | 久久久久久久尹人综合网亚洲 | 久久橹 | 国产精品99精品无码视亚 | 泡妞高手在都市免费观看 | 午夜视频在线网站 | 最新国自产拍 高清完整版 最新国产在线视频在线 | 久久精品亚洲热综合一本奇米 |