PHP压缩与解压Zip(PHPZip类)
<?php
class
PHPZip
{
private
$ctrl_dir
=
array
();
private
$datasec
=
array
();
/**********************************************************
* 压缩部分
**********************************************************/
// ------------------------------------------------------ //
// #遍历指定文件夹
//
// $archive = new PHPZip();
// $filelist = $archive->visitFile(文件夹路径);
// print "当前文件夹的文件:<p>\r\n";
// foreach($filelist as $file)
// printf("%s<br>\r\n", $file);
// ------------------------------------------------------ //
var
$fileList
=
array
();
public
function
visitFile(
$path
)
{
global
$fileList
;
$path
=
str_replace
(
"\\"
,
"/"
,
$path
);
$fdir
= dir(
$path
);
while
((
$file
=
$fdir
->read()) !== false)
{
if
(
$file
==
'.'
||
$file
==
'..'
){
continue
; }
$pathSub
= preg_replace(
"*/{2,}*"
,
"/"
,
$path
.
"/"
.
$file
);
// 替换多个反斜杠
$fileList
[] =
is_dir
(
$pathSub
) ?
$pathSub
.
"/"
:
$pathSub
;
if
(
is_dir
(
$pathSub
)){
$this
->visitFile(
$pathSub
); }
}
$fdir
->close();
return
$fileList
;
}
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;
}
return
( (
$timearray
[
'year'
] - 1980) << 25)
| (
$timearray
[
'mon'
] << 21)
| (
$timearray
[
'mday'
] << 16)
| (
$timearray
[
'hours'
] << 11)
| (
$timearray
[
'minutes'
] << 5)
| (
$timearray
[
'seconds'
] >> 1);
}
var
$old_offset
= 0;
private
function
addFile(
$data
,
$filename
,
$time
= 0)
{
$filename
=
str_replace
(
'\\'
,
'/'
,
$filename
);
$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
=
"\x50\x4b\x03\x04"
;
$fr
.=
"\x14\x00"
;
$fr
.=
"\x00\x00"
;
$fr
.=
"\x08\x00"
;
$fr
.=
$hexdtime
;
$unc_len
=
strlen
(
$data
);
$crc
= crc32(
$data
);
$zdata
= gzcompress(
$data
);
$c_len
=
strlen
(
$zdata
);
$zdata
=
substr
(
substr
(
$zdata
, 0,
strlen
(
$zdata
) - 4), 2);
$fr
.= pack(
'V'
,
$crc
);
$fr
.= pack(
'V'
,
$c_len
);
$fr
.= pack(
'V'
,
$unc_len
);
$fr
.= pack(
'v'
,
strlen
(
$filename
));
$fr
.= pack(
'v'
, 0);
$fr
.=
$filename
;
$fr
.=
$zdata
;
$fr
.= pack(
'V'
,
$crc
);
$fr
.= pack(
'V'
,
$c_len
);
$fr
.= pack(
'V'
,
$unc_len
);
$this
->datasec[] =
$fr
;
$new_offset
=
strlen
(implode(
''
,
$this
->datasec));
$cdrec
=
"\x50\x4b\x01\x02"
;
$cdrec
.=
"\x00\x00"
;
$cdrec
.=
"\x14\x00"
;
$cdrec
.=
"\x00\x00"
;
$cdrec
.=
"\x08\x00"
;
$cdrec
.=
$hexdtime
;
$cdrec
.= pack(
'V'
,
$crc
);
$cdrec
.= pack(
'V'
,
$c_len
);
$cdrec
.= pack(
'V'
,
$unc_len
);
$cdrec
.= pack(
'v'
,
strlen
(
$filename
) );
$cdrec
.= pack(
'v'
, 0 );
$cdrec
.= pack(
'v'
, 0 );
$cdrec
.= pack(
'v'
, 0 );
$cdrec
.= pack(
'v'
, 0 );
$cdrec
.= pack(
'V'
, 32 );
$cdrec
.= pack(
'V'
,
$this
->old_offset );
$this
->old_offset =
$new_offset
;
$cdrec
.=
$filename
;
$this
->ctrl_dir[] =
$cdrec
;
}
var
$eof_ctrl_dir
=
"\x50\x4b\x05\x06\x00\x00\x00\x00"
;
private
function
file()
{
$data
= implode(
''
,
$this
->datasec);
$ctrldir
= implode(
''
,
$this
->ctrl_dir);
return
$data
.
$ctrldir
.
$this
->eof_ctrl_dir
. pack(
'v'
, sizeof(
$this
->ctrl_dir))
. pack(
'v'
, sizeof(
$this
->ctrl_dir))
. pack(
'V'
,
strlen
(
$ctrldir
))
. pack(
'V'
,
strlen
(
$data
))
.
"\x00\x00"
;
}
// ------------------------------------------------------ //
// #压缩到服务器
//
// $archive = new PHPZip();
// $archive->Zip("需压缩的文件所在目录", "ZIP压缩文件名");
// ------------------------------------------------------ //
public
function
Zip(
$dir
,
$saveName
)
{
if
(@!function_exists(
'gzcompress'
)){
return
; }
ob_end_clean();
$filelist
=
$this
->visitFile(
$dir
);
if
(
count
(
$filelist
) == 0){
return
; }
foreach
(
$filelist
as
$file
)
{
if
(!
file_exists
(
$file
) || !
is_file
(
$file
)){
continue
; }
$fd
=
fopen
(
$file
,
"rb"
);
$content
= @
fread
(
$fd
,
filesize
(
$file
));
fclose(
$fd
);
// 1.删除$dir的字符(./folder/file.txt删除./folder/)
// 2.如果存在/就删除(/file.txt删除/)
$file
=
substr
(
$file
,
strlen
(
$dir
));
if
(
substr
(
$file
, 0, 1) ==
"\\"
||
substr
(
$file
, 0, 1) ==
"/"
){
$file
=
substr
(
$file
, 1); }
$this
->addFile(
$content
,
$file
);
}
$out
=
$this
->file();
$fp
=
fopen
(
$saveName
,
"wb"
);
fwrite(
$fp
,
$out
,
strlen
(
$out
));
fclose(
$fp
);
}
// ------------------------------------------------------ //
// #压缩并直接下载
//
// $archive = new PHPZip();
// $archive->ZipAndDownload("需压缩的文件所在目录");
// ------------------------------------------------------ //
public
function
ZipAndDownload(
$dir
)
{
if
(@!function_exists(
'gzcompress'
)){
return
; }
ob_end_clean();
$filelist
=
$this
->visitFile(
$dir
);
if
(
count
(
$filelist
) == 0){
return
; }
foreach
(
$filelist
as
$file
)
{
if
(!
file_exists
(
$file
) || !
is_file
(
$file
)){
continue
; }
$fd
=
fopen
(
$file
,
"rb"
);
$content
= @
fread
(
$fd
,
filesize
(
$file
));
fclose(
$fd
);
// 1.删除$dir的字符(./folder/file.txt删除./folder/)
// 2.如果存在/就删除(/file.txt删除/)
$file
=
substr
(
$file
,
strlen
(
$dir
));
if
(
substr
(
$file
, 0, 1) ==
"\\"
||
substr
(
$file
, 0, 1) ==
"/"
){
$file
=
substr
(
$file
, 1); }
$this
->addFile(
$content
,
$file
);
}
$out
=
$this
->file();
@header(
'Content-Encoding: none'
);
@header(
'Content-Type: application/zip'
);
@header(
'Content-Disposition: attachment ; filename=Farticle'
.
date
(
"YmdHis"
, time()).
'.zip'
);
@header(
'Pragma: no-cache'
);
@header(
'Expires: 0'
);
print
(
$out
);
}
/**********************************************************
* 解压部分
**********************************************************/
// ------------------------------------------------------ //
// ReadCentralDir($zip, $zipfile)
// $zip是经过@fopen($zipfile, 'rb')打开的
// $zipfile是zip文件的路径
// ------------------------------------------------------ //
private
function
ReadCentralDir(
$zip
,
$zipfile
)
{
$size
=
filesize
(
$zipfile
);
$max_size
= (
$size
< 277) ?
$size
: 277;
@
fseek
(
$zip
,
$size
-
$max_size
);
$pos
=
ftell
(
$zip
);
$bytes
= 0x00000000;
while
(
$pos
<
$size
)
{
$byte
= @
fread
(
$zip
, 1);
$bytes
= (
$bytes
<< 8) | Ord(
$byte
);
$pos
++;
if
(
$bytes
== 0x504b0506){
break
; }
}
$data
= unpack(
'vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size'
,
fread
(
$zip
, 18));
$centd
[
'comment'
] = (
$data
[
'comment_size'
] != 0) ?
fread
(
$zip
,
$data
[
'comment_size'
]) :
''
;
// 注释
$centd
[
'entries'
] =
$data
[
'entries'
];
$centd
[
'disk_entries'
] =
$data
[
'disk_entries'
];
$centd
[
'offset'
] =
$data
[
'offset'
];
$centd
[
'disk_start'
] =
$data
[
'disk_start'
];
$centd
[
'size'
] =
$data
[
'size'
];
$centd
[
'disk'
] =
$data
[
'disk'
];
return
$centd
;
}
private
function
ReadCentralFileHeaders(
$zip
)
{
$binary_data
=
fread
(
$zip
, 46);
$header
= unpack(
'vchkid/vid/vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset'
,
$binary_data
);
$header
[
'filename'
] = (
$header
[
'filename_len'
] != 0) ?
fread
(
$zip
,
$header
[
'filename_len'
]) :
''
;
$header
[
'extra'
] = (
$header
[
'extra_len'
] != 0) ?
fread
(
$zip
,
$header
[
'extra_len'
]) :
''
;
$header
[
'comment'
] = (
$header
[
'comment_len'
] != 0) ?
fread
(
$zip
,
$header
[
'comment_len'
]) :
''
;
if
(
$header
[
'mdate'
] &&
$header
[
'mtime'
])
{
$hour
= (
$header
[
'mtime'
] & 0xF800) >> 11;
$minute
= (
$header
[
'mtime'
] & 0x07E0) >> 5;
$seconde
= (
$header
[
'mtime'
] & 0x001F) * 2;
$year
= ((
$header
[
'mdate'
] & 0xFE00) >> 9) + 1980;
$month
= (
$header
[
'mdate'
] & 0x01E0) >> 5;
$day
=
$header
[
'mdate'
] & 0x001F;
$header
[
'mtime'
] =
mktime
(
$hour
,
$minute
,
$seconde
,
$month
,
$day
,
$year
);
}
else
{
$header
[
'mtime'
] = time();
}
$header
[
'stored_filename'
] =
$header
[
'filename'
];
$header
[
'status'
] =
'ok'
;
if
(
substr
(
$header
[
'filename'
], -1) ==
'/'
){
$header
[
'external'
] = 0x41FF0010; }
// 判断是否文件夹
return
$header
;
}
private
function
ReadFileHeader(
$zip
)
{
$binary_data
=
fread
(
$zip
, 30);
$data
= unpack(
'vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len'
,
$binary_data
);
$header
[
'filename'
] =
fread
(
$zip
,
$data
[
'filename_len'
]);
$header
[
'extra'
] = (
$data
[
'extra_len'
] != 0) ?
fread
(
$zip
,
$data
[
'extra_len'
]) :
''
;
$header
[
'compression'
] =
$data
[
'compression'
];
$header
[
'size'
] =
$data
[
'size'
];
$header
[
'compressed_size'
] =
$data
[
'compressed_size'
];
$header
[
'crc'
] =
$data
[
'crc'
];
$header
[
'flag'
] =
$data
[
'flag'
];
$header
[
'mdate'
] =
$data
[
'mdate'
];
$header
[
'mtime'
] =
$data
[
'mtime'
];
if
(
$header
[
'mdate'
] &&
$header
[
'mtime'
]){
$hour
= (
$header
[
'mtime'
] & 0xF800) >> 11;
$minute
= (
$header
[
'mtime'
] & 0x07E0) >> 5;
$seconde
= (
$header
[
'mtime'
] & 0x001F) * 2;
$year
= ((
$header
[
'mdate'
] & 0xFE00) >> 9) + 1980;
$month
= (
$header
[
'mdate'
] & 0x01E0) >> 5;
$day
=
$header
[
'mdate'
] & 0x001F;
$header
[
'mtime'
] =
mktime
(
$hour
,
$minute
,
$seconde
,
$month
,
$day
,
$year
);
}
else
{
$header
[
'mtime'
] = time();
}
$header
[
'stored_filename'
] =
$header
[
'filename'
];
$header
[
'status'
] =
"ok"
;
return
$header
;
}
private
function
ExtractFile(
$header
,
$to
,
$zip
)
{
$header
=
$this
->readfileheader(
$zip
);
if
(
substr
(
$to
, -1) !=
"/"
){
$to
.=
"/"
; }
if
(!@
is_dir
(
$to
)){ @
mkdir
(
$to
, 0777); }
$pth
=
explode
(
"/"
, dirname(
$header
[
'filename'
]));
for
(
$i
=0; isset(
$pth
[
$i
]);
$i
++){
if
(!
$pth
[
$i
]){
continue
; }
$pthss
.=
$pth
[
$i
].
"/"
;
if
(!
is_dir
(
$to
.
$pthss
)){ @
mkdir
(
$to
.
$pthss
, 0777); }
}
if
(!(
$header
[
'external'
] == 0x41FF0010) && !(
$header
[
'external'
] == 16))
{
if
(
$header
[
'compression'
] == 0)
{
$fp
= @
fopen
(
$to
.
$header
[
'filename'
],
'wb'
);
if
(!
$fp
){
return
(-1); }
$size
=
$header
[
'compressed_size'
];
while
(
$size
!= 0)
{
$read_size
= (
$size
< 2048 ?
$size
: 2048);
$buffer
=
fread
(
$zip
,
$read_size
);
$binary_data
= pack(
'a'
.
$read_size
,
$buffer
);
@fwrite(
$fp
,
$binary_data
,
$read_size
);
$size
-=
$read_size
;
}
fclose(
$fp
);
touch(
$to
.
$header
[
'filename'
],
$header
[
'mtime'
]);
}
else
{
$fp
= @
fopen
(
$to
.
$header
[
'filename'
].
'.gz'
,
'wb'
);
if
(!
$fp
){
return
(-1); }
$binary_data
= pack(
'va1a1Va1a1'
, 0x8b1f,
Chr
(
$header
[
'compression'
]),
Chr
(0x00), time(),
Chr
(0x00),
Chr
(3));
fwrite(
$fp
,
$binary_data
, 10);
$size
=
$header
[
'compressed_size'
];
while
(
$size
!= 0)
{
$read_size
= (
$size
< 1024 ?
$size
: 1024);
$buffer
=
fread
(
$zip
,
$read_size
);
$binary_data
= pack(
'a'
.
$read_size
,
$buffer
);
@fwrite(
$fp
,
$binary_data
,
$read_size
);
$size
-=
$read_size
;
}
$binary_data
= pack(
'VV'
,
$header
[
'crc'
],
$header
[
'size'
]);
fwrite(
$fp
,
$binary_data
, 8);
fclose(
$fp
);
$gzp
= @gzopen(
$to
.
$header
[
'filename'
].
'.gz'
,
'rb'
)
or
die
(
"Cette archive est compress!"
);
if
(!
$gzp
){
return
(-2); }
$fp
= @
fopen
(
$to
.
$header
[
'filename'
],
'wb'
);
if
(!
$fp
){
return
(-1); }
$size
=
$header
[
'size'
];
while
(
$size
!= 0)
{
$read_size
= (
$size
< 2048 ?
$size
: 2048);
$buffer
= gzread(
$gzp
,
$read_size
);
$binary_data
= pack(
'a'
.
$read_size
,
$buffer
);
@fwrite(
$fp
,
$binary_data
,
$read_size
);
$size
-=
$read_size
;
}
fclose(
$fp
); gzclose(
$gzp
);
touch(
$to
.
$header
[
'filename'
],
$header
[
'mtime'
]);
@unlink(
$to
.
$header
[
'filename'
].
'.gz'
);
}
}
return
true;
}
// ------------------------------------------------------ //
// #解压文件
//
// $archive = new PHPZip();
// $zipfile = "ZIP压缩文件名";
// $savepath = "解压缩目录名";
// $zipfile = $unzipfile;
// $savepath = $unziptarget;
// $array = $archive->GetZipInnerFilesInfo($zipfile);
// $filecount = 0;
// $dircount = 0;
// $failfiles = array();
// set_time_limit(0); // 修改为不限制超时时间(默认为30秒)
//
// for($i=0; $i<count($array); $i++) {
// if($array[$i][folder] == 0){
// if($archive->unZip($zipfile, $savepath, $i) > 0){
// $filecount++;
// }else{
// $failfiles[] = $array[$i][filename];
// }
// }else{
// $dircount++;
// }
// }
// set_time_limit(30);
//printf(" 文件夹:%d 解压文 件:%d 失败:%d<br>\r\n", $dircount, $filecount, count($failfiles));
//if(count($failfiles) > 0){
// foreach($failfiles as $file){
// printf("·%s<br>\r\n", $file);
// }
//}
// ------------------------------------------------------ //
public
function
unZip(
$zipfile
,
$to
,
$index
= Array(-1))
{
$ok
= 0;
$zip
= @
fopen
(
$zipfile
,
'rb'
);
if
(!
$zip
){
return
(-1); }
$cdir
=
$this
->ReadCentralDir(
$zip
,
$zipfile
);
$pos_entry
=
$cdir
[
'offset'
];
if
(!
is_array
(
$index
)){
$index
=
array
(
$index
); }
for
(
$i
=0;
$index
[
$i
];
$i
++)
{
if
(
intval
(
$index
[
$i
]) !=
$index
[
$i
] ||
$index
[
$i
] >
$cdir
[
'entries'
])
{
return
(-1);
}
}
for
(
$i
=0;
$i
<
$cdir
[
'entries'
];
$i
++)
{
@
fseek
(
$zip
,
$pos_entry
);
$header
=
$this
->ReadCentralFileHeaders(
$zip
);
$header
[
'index'
] =
$i
;
$pos_entry
=
ftell
(
$zip
);
@
rewind
(
$zip
);
fseek
(
$zip
,
$header
[
'offset'
]);
if
(in_array(
"-1"
,
$index
) || in_array(
$i
,
$index
))
{
$stat
[
$header
[
'filename'
]] =
$this
->ExtractFile(
$header
,
$to
,
$zip
);
}
}
fclose(
$zip
);
return
$stat
;
}
/**********************************************************
* 其它部分
**********************************************************/
// ------------------------------------------------------ //
// #获取被压缩文件的信息
//
// $archive = new PHPZip();
// $array = $archive->GetZipInnerFilesInfo(ZIP压缩文件名);
// for($i=0; $i<count($array); $i++) {
// printf("<b>·%s</b><br>\r\n", $array[$i][filename]);
// foreach($array[$i] as $key => $value)
// printf("%s => %s<br>\r\n", $key, $value);
// print "\r\n<p>------------------------------------<p>\r\n\r\n";
// }
// ------------------------------------------------------ //
public
function
GetZipInnerFilesInfo(
$zipfile
)
{
$zip
= @
fopen
(
$zipfile
,
'rb'
);
if
(!
$zip
){
return
(0); }
$centd
=
$this
->ReadCentralDir(
$zip
,
$zipfile
);
@
rewind
(
$zip
);
@
fseek
(
$zip
,
$centd
[
'offset'
]);
$ret
=
array
();
for
(
$i
=0;
$i
<
$centd
[
'entries'
];
$i
++)
{
$header
=
$this
->ReadCentralFileHeaders(
$zip
);
$header
[
'index'
] =
$i
;
$info
=
array
(
'filename'
=>
$header
[
'filename'
],
// 文件名
'stored_filename'
=>
$header
[
'stored_filename'
],
// 压缩后文件名
'size'
=>
$header
[
'size'
],
// 大小
'compressed_size'
=>
$header
[
'compressed_size'
],
// 压缩后大小
'crc'
=>
strtoupper
(
dechex
(
$header
[
'crc'
])),
// CRC32
'mtime'
=>
date
(
"Y-m-d H:i:s"
,
$header
[
'mtime'
]),
// 文件修改时间
'comment'
=>
$header
[
'comment'
],
// 注释
'folder'
=> (
$header
[
'external'
] == 0x41FF0010 ||
$header
[
'external'
] == 16) ? 1 : 0,
// 是否为文件夹
'index'
=>
$header
[
'index'
],
// 文件索引
'status'
=>
$header
[
'status'
]
// 状态
);
$ret
[] =
$info
;
unset(
$header
);
}
fclose(
$zip
);
return
$ret
;
}
// ------------------------------------------------------ //
// #获取压缩文件的注释
//
// $archive = new PHPZip();
// echo $archive->GetZipComment(ZIP压缩文件名);
// ------------------------------------------------------ //
public
function
GetZipComment(
$zipfile
)
{
$zip
= @
fopen
(
$zipfile
,
'rb'
);
if
(!
$zip
){
return
(0); }
$centd
=
$this
->ReadCentralDir(
$zip
,
$zipfile
);
fclose(
$zip
);
return
$centd
[comment];
}
}
?>
<form method=
"post"
>
压缩到服务器:
<br>------------------<br>
压缩目录: <input name=
"zipdir"
type=
"text"
id=
"zipdir"
/>(例如./folder)<br>
另存为路径和文件名:<input name=
"savename"
type=
"text"
id=
"savename"
/>(例如./folder/file.zip)(需要填写扩展名)<br>
<input name=
"zip"
type=
"submit"
id=
"zip"
value=
"压缩"
/><br>
<br><br><br>
压缩并下载
<br>------------------<br>
文件所在目录:<input name=
"zipdowndir"
type=
"text"
id=
"zipdowndir"
/>(例如./folder)<br>
<input name=
"zipdown"
type=
"submit"
id=
"zipdown"
value=
"压缩并下载"
/>
<br><br><br>
在线解压zip
<br>------------------<br>
文件: <input name=
"unzipfile"
type=
"text"
id=
"unzipfile"
/>(例如./folder/file.zip)<br>
解压到:<input name=
"unziptarget"
type=
"text"
id=
"unziptarget"
/>(例如./folder)<br>
<input name=
"unzip"
type=
"submit"
id=
"unzip"
value=
"解压"
/>
<br><br><br>
读取压缩文件内部文件信息和注释
<br>------------------<br>
文件:<input name=
"readfile"
type=
"text"
id=
"readfile"
/>(例如./folder/file.zip)<br>
<input name=
"readfileinfo"
type=
"submit"
id=
"readfileinfo"
value=
"读取内部文件信息"
/>
<input name=
"readcomment"
type=
"submit"
id=
"readcomment"
value=
"读取注释"
/>
</form>
<?
echo
"<p><p>\r\n"
;
echo
"<br>--------------------------<br>\r\n"
;
echo
"显示信息:\r\n"
;
echo
"<br>--------------------------<br>\r\n"
;
$archive
=
new
PHPZip();
if
(!
empty
(
$zip
))
{
$archive
->Zip(
$zipdir
,
$savename
);
}
elseif
(!
empty
(
$zipdown
))
{
$archive
->ZipAndDownload(
$zipdowndir
);
}
elseif
(!
empty
(
$unzip
))
{
$zipfile
=
$unzipfile
;
$savepath
=
$unziptarget
;
$array
=
$archive
->GetZipInnerFilesInfo(
$zipfile
);
$filecount
= 0;
$dircount
= 0;
$failfiles
=
array
();
set_time_limit(0);
// 修改为不限制超时时间(默认为30秒)
for
(
$i
=0;
$i
<
count
(
$array
);
$i
++) {
if
(
$array
[
$i
][folder] == 0){
if
(
$archive
->unZip(
$zipfile
,
$savepath
,
$i
) > 0){
$filecount
++;
}
else
{
$failfiles
[] =
$array
[
$i
][filename];
}
}
else
{
$dircount
++;
}
}
set_time_limit(30);
printf(
"文件夹:%d 解压文件:%d 失败:%d<br>\r\n"
,
$dircount
,
$filecount
,
count
(
$failfiles
));
if
(
count
(
$failfiles
) > 0){
foreach
(
$failfiles
as
$file
){
printf(
"·%s<br>\r\n"
,
$file
);
}
}
}
elseif
(!
empty
(
$readfileinfo
))
{
$array
=
$archive
->GetZipInnerFilesInfo(
$readfile
);
for
(
$i
=0;
$i
<
count
(
$array
);
$i
++) {
printf(
"<b>·%s</b><br>\r\n"
,
$array
[
$i
][filename]);
foreach
(
$array
[
$i
]
as
$key
=>
$value
)
printf(
"%s => %s<br>\r\n"
,
$key
,
$value
);
print
"\r\n<p>------------------------------------<p>\r\n\r\n"
;
}
}
elseif
(!
empty
(
$readcomment
))
{
$comment
=
$archive
->GetZipComment(
$readfile
);
printf(
"%s<br>\r\n"
,
$comment
);
}
?>
PHP压缩与解压Zip(PHPZip类)的更多相关文章
- linux下压缩与解压(zip、unzip、tar)详解
linux下压缩与解压(zip.unzip.tar)详解 2012-05-09 13:58:39| 分类: linux | 标签:linux zip unzip tar linux命令详解 |举报|字 ...
- Java实现文件压缩与解压[zip格式,gzip格式]
Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例. zip扮演着归档和压缩两个角色:gzip并 ...
- C# 文件压缩与解压(ZIP格式)
在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流行的压缩文件格式都是RAR的,但是由于RAR不是一个开放的标准,因此ZIP成了更多人的选择.如果你不想自己开发的话可以选择开源的项目,比如Sh ...
- Linux 下压缩与解压.zip和.rar
)对于.zip linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序.它们的参数选项很多,可用命令zip -help和unzip -help查看,这里只做简单介绍,举例说明 ...
- Java_压缩与解压工具类
转载请注明出处:http://blog.csdn.net/y22222ly/article/details/52201675 zip压缩,解压 zip压缩与解压主要依靠java api的两个类: Zi ...
- java 解压 zip 包并删除
需求是这样的, 在服务器上有 运营上传的zip 包,内容是用户的照片,我需要做的是 获取这些照片上传,并保存到 数据库. 这里面的 上传照片,保存数据库都不难,主要问题是解压zip包,和删除zip ...
- I/O操作之文件压缩与解压
与文件压缩与解压相关的类在java.util.zip包下 实例 //文件压缩 import java.io.File; import java.io.FileInputStream; import j ...
- Ubuntu下压缩与解压各种文件的命令
1.压缩与解压xz文件 (1)压缩 xz -z filename (2)解压 xz -d filename.xz 2.压缩与解压tar文件 (1)压缩 tar -cvf filename(压缩到 ...
- 文件操作工具类: 文件/目录的创建、删除、移动、复制、zip压缩与解压.
FileOperationUtils.java package com.xnl.utils; import java.io.BufferedInputStream; import java.io.Bu ...
随机推荐
- poj3301--Texas Trip(最小正方形覆盖)
题目链接:点击打开链接 题目大意:给出n个点的坐标.如今要求一个正方形,全然包围n个点.而且正方形面积最小,求最小的正方形面积. 表示不能理解为什么面积随着角度的变化是一个单峰的函数,等待大牛告诉一下 ...
- 最新Android面试题集锦
近期由于某些原因想换工作,整理一下个人认为面试中还比較值得记录的一些题目,给须要找这方面工作的人一个借鉴. 下面基本仅仅记录题目或者大概答案,假设大家有比較具体的解答或者比較好的面试题木,希望各位看到 ...
- Merging an upstream repository into your fork
1. Check out the branch you wish to merge to. Usually, you will merge into master. $ git checkout ma ...
- 第十六篇:Linux系统编程中环境变量的使用
前言 在 UNIX Like 系统中,存有各类系统/应用程序的环境变量,可通过修改之改变系统/应用程序的执行效果:除此之外,用户还可以定义自己的环境变量,供自己写的程序使用. 本文将说明如何在程序中设 ...
- 使用js里面的迭代器filter实现数组去重
实现数组去重的方法很多,最原始的方法是一个值一个值的去遍历,写到空数组里面: let r=[],arr = ['a', 'b', 'c', 'a']; for(var i=0,len=arr.leng ...
- std::condition_variable
/* std::condition_variable 提供了两种 wait() 函数.当前线程调用 wait() 后将被阻塞(此时当前线程应该获得了锁(mutex),不妨设获得锁 lck),直到另外某 ...
- poj_2823 线段树
题目大意 给定一行数,共N个.有一个长度为K的窗口从左向右滑动,窗口中始终有K个数字,窗口每次滑动一个数字.求各个时刻窗口中的最大值和最小值. 题目分析 直接搜索,复杂度为O(n^2).本题可以看做是 ...
- CSS解决图片缩小不变形
我会在图片上加: <img style="max-width:80px;max-height:80px;"> 限制其最大宽度和高度
- 利用MFC实现浏览器的定制与扩展(JavaScript与C++交互)
原文地址:http://www.vckbase.com/document/viewdoc/?id=1486 浏览器的定制与扩展 作者:李汉鹏 下载源代 码 本文分如下章节: 前 言 在 ...
- 一个I/O线程可以并发处理N个客户端连接和读写操作 I/O复用模型 基于Buf操作NIO可以读取任意位置的数据 Channel中读取数据到Buffer中或将数据 Buffer 中写入到 Channel 事件驱动消息通知观察者模式
Tomcat那些事儿 https://mp.weixin.qq.com/s?__biz=MzI3MTEwODc5Ng==&mid=2650860016&idx=2&sn=549 ...