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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
|
class PHPZip { function Zip( $dir , $zipfilename ) { if (@function_exists( 'gzcompress' )) { $curdir = getcwd (); if ( is_array ( $dir )) { $filelist = $dir ; } else { $filelist = $this -> GetFileList( $dir ); } if ((! empty ( $dir ))&&(! is_array ( $dir ))&&( file_exists ( $dir ))) chdir ( $dir ); else chdir ( $curdir ); if ( count ( $filelist )>0) { foreach ( $filelist as $filename ) { if ( is_file ( $filename )) { $fd = fopen ( $filename , "r" ); $content = fread ( $fd , filesize ( $filename )); fclose ( $fd ); if ( is_array ( $dir )) $filename = basename ( $filename ); $this -> addFile( $content , $filename ); } } $out = $this -> file(); chdir ( $curdir ); $fp = fopen ( $zipfilename , "w" ); fwrite( $fp , $out , strlen ( $out )); fclose( $fp ); } return 1; } else return 0; } function GetFileList( $dir ) { if ( file_exists ( $dir )) { $args = func_get_args(); $pref = $args [1]; $dh = opendir( $dir ); while ( $files = readdir( $dh )) { if (( $files != "." )&&( $files != ".." )) { if ( is_dir ( $dir . $files )) { $curdir = getcwd (); chdir ( $dir . $files ); $file = array_merge ( $file , $this -> GetFileList( "" , "$pref$files/" )); chdir ( $curdir ); } else $file []= $pref . $files ; } } closedir ( $dh ); } return $file ; } var $datasec = array (); var $ctrl_dir = array (); var $eof_ctrl_dir = "x50x4bx05x06x00x00x00x00" ; var $old_offset = 0; /** * Converts an Unix timestamp to a four byte DOS date and time format (date * in high two bytes, time in low two bytes allowing magnitude comparison). * * @param integer the current Unix timestamp * * @return integer the current date in a four byte DOS format * * @access private */ function unix2DosTime( $unixtime = 0) { $timearray = ( $unixtime == 0) ? getdate () : getdate ( $unixtime ); if ( $timearray [ 'year' ] < 1980) { $timearray [ 'year' ] = 1980; $timearray [ 'mon' ] = 1; $timearray [ 'mday' ] = 1; $timearray [ 'hours' ] = 0; $timearray [ 'minutes' ] = 0; $timearray [ 'seconds' ] = 0; } // end if return (( $timearray [ 'year' ] - 1980) << 25) | ( $timearray [ 'mon' ] << 21) | ( $timearray [ 'mday' ] << 16) | ( $timearray [ 'hours' ] << 11) | ( $timearray [ 'minutes' ] << 5) | ( $timearray [ 'seconds' ] >> 1); } // end of the 'unix2DosTime()' method /** * Adds "file" to archive * * @param string file contents * @param string name of the file in the archive (may contains the path) * @param integer the current timestamp * * @access public */ function addFile( $data , $name , $time = 0) { $name = str_replace ( '' , '/' , $name ); $dtime = dechex ( $this ->unix2DosTime( $time )); $hexdtime = 'x' . $dtime [6] . $dtime [7] . 'x' . $dtime [4] . $dtime [5] . 'x' . $dtime [2] . $dtime [3] . 'x' . $dtime [0] . $dtime [1]; eval ( '$hexdtime = "' . $hexdtime . '";' ); $fr = "x50x4bx03x04" ; $fr .= "x14x00" ; // ver needed to extract $fr .= "x00x00" ; // gen purpose bit flag $fr .= "x08x00" ; // compression method $fr .= $hexdtime ; // last mod time and date // "local file header" segment $unc_len = strlen ( $data ); $crc = crc32( $data ); $zdata = gzcompress( $data ); $c_len = strlen ( $zdata ); $zdata = substr ( substr ( $zdata , 0, strlen ( $zdata ) - 4), 2); // fix crc bug $fr .= pack( 'V' , $crc ); // crc32 $fr .= pack( 'V' , $c_len ); // compressed filesize $fr .= pack( 'V' , $unc_len ); // uncompressed filesize $fr .= pack( 'v' , strlen ( $name )); // length of filename $fr .= pack( 'v' , 0); // extra field length $fr .= $name ; // "file data" segment $fr .= $zdata ; // "data descriptor" segment (optional but necessary if archive is not // served as file) $fr .= pack( 'V' , $crc ); // crc32 $fr .= pack( 'V' , $c_len ); // compressed filesize $fr .= pack( 'V' , $unc_len ); // uncompressed filesize // add this entry to array $this -> datasec[] = $fr ; $new_offset = strlen (implode( '' , $this ->datasec)); // now add to central directory record $cdrec = "x50x4bx01x02" ; $cdrec .= "x00x00" ; // version made by $cdrec .= "x14x00" ; // version needed to extract $cdrec .= "x00x00" ; // gen purpose bit flag $cdrec .= "x08x00" ; // compression method $cdrec .= $hexdtime ; // last mod time & date $cdrec .= pack( 'V' , $crc ); // crc32 $cdrec .= pack( 'V' , $c_len ); // compressed filesize $cdrec .= pack( 'V' , $unc_len ); // uncompressed filesize $cdrec .= pack( 'v' , strlen ( $name ) ); // length of filename $cdrec .= pack( 'v' , 0 ); // extra field length $cdrec .= pack( 'v' , 0 ); // file comment length $cdrec .= pack( 'v' , 0 ); // disk number start $cdrec .= pack( 'v' , 0 ); // internal file attributes $cdrec .= pack( 'V' , 32 ); // external file attributes - 'archive' bit set $cdrec .= pack( 'V' , $this -> old_offset ); // relative offset of local header $this -> old_offset = $new_offset ; $cdrec .= $name ; // optional extra field, file comment goes here // save to central directory $this -> ctrl_dir[] = $cdrec ; } // end of the 'addFile()' method /** * Dumps out file * * @return string the zipped file * * @access public */ function file() { $data = implode( '' , $this -> datasec); $ctrldir = implode( '' , $this -> ctrl_dir); return $data . $ctrldir . $this -> eof_ctrl_dir . pack( 'v' , sizeof( $this -> ctrl_dir)) . // total # of entries "on this disk" pack( 'v' , sizeof( $this -> ctrl_dir)) . // total # of entries overall pack( 'V' , strlen ( $ctrldir )) . // size of central dir pack( 'V' , strlen ( $data )) . // offset to start of central dir "x00x00" ; // .zip file comment length } // end of the 'file()' method } // end of the 'PHPZip' class ?> <?php //使用方法 $z = new PHPZip(); //新建立一个zip的类 方法一: $z -> Zip( "" , "out1.zip" ); //添加当前目录和子目录下的所有档案 方法二: $files = array ( '1.txt' , 'gb.txt' ); $files []= '5.txt' ; $z -> Zip( $files , "out2.zip" ); //添加文件列表 方法三: $z -> Zip( "/usr/local/sext/" , "out3.zip" ); //添加指定目录 ?> |
1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有猫币奖励和额外收入!
5. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
常见问题
相关文章
猜你喜欢
- PHP7中对十六进制字符串处理的问题详解 2023-04-10
- PHP 添加水印 & 比例缩略图 & 固定高度 & 固定宽度 类。 2023-04-06
- PHP 远程图片获取到本地 2023-04-06
- 一个很好的PHP验证类 2023-04-06
- PHP 文件本身操作 2023-04-06
- PHP目录操作 2023-04-06
- PHP 文件的基本操作 2023-04-06
- PHP的文件操作 2023-04-06
- php 把汉字转换为拼音 2023-04-06
- PHP 获取IP地址 2023-04-06
Can you be more specific about the content of your article? After reading it, I still have some doubts. Hope you can help me.