本文实例讲述了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程序设计有所帮助。