本文实例讲述了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
|
/** * function: 解压zip 格式的文件 * author:friker * date:2015-15-14 * reference:http://php.net/manual/zh/ref.zip.php * all rights reserved:wujiangwei123@126.com */ class Unzip{ public function __construct(){ //init code here... header( "content-type:text/html;charset=utf8" ); } /** * 解压文件到指定目录 * * @param string zip压缩文件的路径 * @param string 解压文件的目的路径 * @param boolean 是否以压缩文件的名字创建目标文件夹 * @param boolean 是否重写已经存在的文件 * * @return boolean 返回成功 或失败 */ public function unzip( $src_file , $dest_dir =false, $create_zip_name_dir =true, $overwrite =true){ if ( $zip = zip_open( $src_file )){ if ( $zip ){ $splitter = ( $create_zip_name_dir === true) ? "." : "/" ; if ( $dest_dir === false){ $dest_dir = substr ( $src_file , 0, strrpos ( $src_file , $splitter )). "/" ; } // 如果不存在 创建目标解压目录 $this ->create_dirs( $dest_dir ); // 对每个文件进行解压 while ( $zip_entry = zip_read( $zip )){ // 文件不在根目录 $pos_last_slash = strrpos (zip_entry_name( $zip_entry ), "/" ); if ( $pos_last_slash !== false){ // 创建目录 在末尾带 / $this ->create_dirs( $dest_dir . substr (zip_entry_name( $zip_entry ), 0, $pos_last_slash +1)); } // 打开包 if (zip_entry_open( $zip , $zip_entry , "r" )){ // 文件名保存在磁盘上 $file_name = $dest_dir .zip_entry_name( $zip_entry ); // 检查文件是否需要重写 if ( $overwrite === true || $overwrite === false && ! is_file ( $file_name )){ // 读取压缩文件的内容 $fstream = zip_entry_read( $zip_entry , zip_entry_filesize( $zip_entry )); @ file_put_contents ( $file_name , $fstream ); // 设置权限 chmod ( $file_name , 0777); echo "save: " . $file_name . "<br />" ; } // 关闭入口 zip_entry_close( $zip_entry ); } } // 关闭压缩包 zip_close( $zip ); } } else { return false; } return true; } /** * 创建目录 */ public function create_dirs( $path ){ if (! is_dir ( $path )){ $directory_path = "" ; $directories = explode ( "/" , $path ); array_pop ( $directories ); foreach ( $directories as $directory ){ $directory_path .= $directory . "/" ; if (! is_dir ( $directory_path )){ mkdir ( $directory_path ); chmod ( $directory_path , 0777); } } } } } /* using: $z = new Unzip(); $z->unzip("./bootstrap-3.3.4.zip",'./unzipres/', true, false); */ |
希望本文所述对大家PHP程序设计有所帮助。