本文实例讲述了PHP实现打包下载文件的方法。分享给大家供大家参考,具体如下:
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
110
111
|
/** * 下载文件 * @param $img * @return string */ public function Download( $img ) { $items = []; $names = []; if ( $img ) { //用于前端跳转zip链接拼接 $path_redirect = '/zip/' . date ( 'Ymd' ); //临时文件存储地址 $path = '/tmp' . $path_redirect ; if (! is_dir ( $path )) { mkdir ( $path , 0777,true); } foreach ( $img as $key => $value ) { $fileContent = '' ; $fileContent = $this ->CurlDownload( $value [ 'url' ]); if ( $fileContent ) { $__tmp = $this ->SaveFile( $value [ 'url' ] , $path , $fileContent ); $items [] = $__tmp [0]; $names [] = $value [ 'name' ]. '_' .( $key +1). '.' . $__tmp [1]; } } if ( $items ) { $zip = new ZipArchive(); $filename = time(). 'download.zip' ; $zipname = $path . '/' . $filename ; if (! file_exists ( $zipname )) { $res = $zip ->open( $zipname , ZipArchive::CREATE | ZipArchive::OVERWRITE); if ( $res ) { foreach ( $items as $k => $v ) { $value = explode ( "/" , $v ); $end = end ( $value ); $zip ->addFile( $v , $end ); $zip ->renameName( $end , $names [ $k ]); } $zip ->close(); } else { return '' ; } //通过前端js跳转zip地址下载,让不使用php代码下载zip文件 //if (file_exists($zipname)) { //拼接附件地址 //$redirect = 域名.$path_redirect.'/'.$filename; //return $redirect; //header("Location:".$redirect); //} //直接写文件的方式下载到客户端 if ( file_exists ( $zipname )) { header( "Cache-Control: public" ); header( "Content-Description: File Transfer" ); header( 'Content-disposition: attachment; filename=附件.zip' ); //文件名 header( "Content-Type: application/zip" ); //zip格式的 header( "Content-Transfer-Encoding: binary" ); //告诉浏览器,这是二进制文件 header( 'Content-Length: ' . filesize ( $zipname )); //告诉浏览器,文件大小 @readfile( $zipname ); } //删除临时文件 @unlink( $zipname ); } } return '' ; } } /** * curl获取链接内容 * @param $url * @return mixed|string */ public function CurlDownload( $url ) { $ch = curl_init( $url ); curl_setopt( $ch , CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); curl_setopt( $ch , CURLOPT_HEADER, 0); curl_setopt( $ch , CURLOPT_CONNECTTIMEOUT, 20); curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, false); curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST, false); $errno = curl_errno( $ch ); $error = curl_error( $ch ); $res =curl_exec( $ch ); curl_close( $ch ); if ( $errno >0){ return '' ; } return $res ; } /** * 保存临时文件 * @param $url * @param $dir * @param $content * @return array */ public function SaveFile( $url , $dir , $content ) { $fname = basename ( $url ); //返回路径中的文件名部分 $str_name = pathinfo ( $fname ); //以数组的形式返回文件路径的信息 $extname = strtolower ( $str_name [ 'extension' ]); //把扩展名转换成小写 $path = $dir . '/' .md5( $url ). $extname ; $fp = fopen ( $path , 'w+' ); fwrite( $fp , $content ); fclose( $fp ); return array ( $path , $extname ) ; } |
引用:
1
2
|
$img = [[ 'url' => '地址url/1.jpg' , 'name' => '名字' ]]; Download( $img ); |
希望本文所述对大家PHP程序设计有所帮助。
原文链接:http://blog.csdn.net/alen_xiaoxin/article/details/72844469