首頁 > php教程 > php手册 > ThinkPHP实现将本地文件打包成zip下载

ThinkPHP实现将本地文件打包成zip下载

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2016-06-13 09:31:54
原創
1422 人瀏覽過

首先,将FileToZip.class文件放到ThinkPHP/Extend/Library/ORG/Util/文件夹中,FileToZip.class.php为zip下载类,其详细代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

<&#63;php

/**

 * zip下载类文件

 * 遍历目录,打包成zip格式

 */

class traverseDir{

 public $currentdir;//当前目录

 public $filename;//文件名

 public $fileinfo;//用于保存当前目录下的所有文件名和目录名以及文件大小

 public $savepath;

 public function __construct($curpath,$savepath){

  $this->currentdir=$curpath;//返回当前目录

  $this->savepath=$savepath;//返回当前目录

 

 //遍历目录

 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($savepath.$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',$savepath); //下载文件

   $dw->getfiles();

   unlink($savepath.$zipname.'.zip'); //下载完成后要进行删除

  }

 }

}

/**

 * 下载文件

 *

 */

class download{

 protected $_filename;

 protected $_filepath;

 protected $_filesize;//文件大小

 protected $savepath;//文件大小

 public function __construct($filename,$savepath){

  $this->_filename=$filename;

  $this->_filepath=$savepath.$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>";

  }

 }

}

登入後複製

ThinkPHP中加载zip下载类FileToZip.class.php并实现本地文件打包下载的功能代码如下所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

import('ORG.Util.FileToZip');//引入zip下载类文件FileToZip

// 打包下载

$handler = opendir($cur_file); //$cur_file 文件所在目录

$download_file = array();

$i = 0;

while( ($filename = readdir($handler)) !== false ) {

 if($filename != '.' && $filename != '..') {

 $download_file[$i++] = $filename;

 }

}

closedir($handler);

$scandir=new traverseDir($cur_file,$save_path); //$save_path zip包文件目录

$scandir->tozip($download_file);

登入後複製

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
為什麼thinkphp比laravel效能好?
來自於 1970-01-01 08:00:00
0
0
0
php6支援的thinkphp版本
來自於 1970-01-01 08:00:00
0
0
0
mscms.qishouzhijia.com,自學thinkphp做的網站
來自於 1970-01-01 08:00:00
0
0
0
ThinkPHP什麼要用composer?
來自於 1970-01-01 08:00:00
0
0
0
thinkphp上傳文件
來自於 1970-01-01 08:00:00
0
0
0
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板