解压类 --简单、易懂
时间:2007-04-14
来源:互联网
PHP代码:
function ReadFileHeader(&$p_header){$v_binary_data = @fread($this->zip_fd, 4);
$v_data = unpack('Vid', $v_binary_data);
if ($v_data['id'] != 0x04034b50){
return FALSE;
}
$v_binary_data = fread($this->zip_fd, 26);
if (strlen($v_binary_data) != 26){
$p_header['filename'] = "";
$p_header['status'] = "invalid_header";
return FALSE;
}
$v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data);
$p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']);
if ($v_data['extra_len'] != 0) {
$p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']);
}else {
$p_header['extra'] = '';
}
$p_header['version_extracted'] = $v_data['version'];
$p_header['compression'] = $v_data['compression'];
$p_header['size'] = $v_data['size'];
$p_header['compressed_size'] = $v_data['compressed_size'];
$p_header['crc'] = $v_data['crc'];
$p_header['flag'] = $v_data['flag'];
$p_header['filename_len'] = $v_data['filename_len'];
$p_header['mdate'] = $v_data['mdate'];
$p_header['mtime'] = $v_data['mtime'];
if ($p_header['mdate'] && $p_header['mtime']){
$v_hour = ($p_header['mtime'] & 0xF800) >> 11;
$v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
$v_seconde = ($p_header['mtime'] & 0x001F)*2;
$v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
$v_month = ($p_header['mdate'] & 0x01E0) >> 5;
$v_day = $p_header['mdate'] & 0x001F;
$p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
}else{
$p_header['mtime'] = time();
}
$p_header['stored_filename'] = $p_header['filename'];
$p_header['status'] = "ok";
return TRUE;
}
function ReadCentralFileHeader(&$p_header){
$v_binary_data = @fread($this->zip_fd,4);
$v_data = unpack('Vid', $v_binary_data);
if ($v_data['id'] != 0x02014b50){
return FALSE;
}
$v_binary_data = fread($this->zip_fd,42);
if (strlen($v_binary_data) != 42){
$p_header['filename'] = "";
$p_header['status'] = "invalid_header";
return FALSE;
}
$p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data);
if ($p_header['filename_len'] != 0){
$p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']);
}else{
$p_header['filename'] = '';
}
if ($p_header['extra_len'] != 0){
$p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']);
}else{
$p_header['extra'] = '';
}
if ($p_header['comment_len'] != 0){
$p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']);
}else{
$p_header['comment'] = '';
}
if ($p_header['mdate'] && $p_header['mtime']){
$v_hour = ($p_header['mtime'] & 0xF800) >> 11;
$v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
$v_seconde = ($p_header['mtime'] & 0x001F)*2;
$v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
$v_month = ($p_header['mdate'] & 0x01E0) >> 5;
$v_day = $p_header['mdate'] & 0x001F;
$p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
}else{
$p_header['mtime'] = time();
}
$p_header['stored_filename'] = $p_header['filename'];
$p_header['status'] = 'ok';
if (substr($p_header['filename'], -1) == '/') {
$p_header['external'] = 0x00000010;
}
return TRUE;
}
function ReadEndCentralDir(&$p_central_dir){
$v_size = filesize($this->zipname);
@fseek($this->zip_fd, $v_size);
if (@ftell($this->zip_fd) != $v_size){
return FALSE;
}
$v_found = 0;
if ($v_size > 26) {
@fseek($this->zip_fd, $v_size-22);
if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22)){
return FALSE;
}
$v_binary_data = @fread($this->zip_fd, 4);
$v_data = @unpack('Vid', $v_binary_data);
if ($v_data['id'] == 0x06054b50) {
$v_found = 1;
}
$v_pos = ftell($this->zip_fd);
}
if (!$v_found) {
$v_maximum_size = 65557;// 0xFFFF + 22;
if($v_maximum_size > $v_size){
$v_maximum_size = $v_size;
}
@fseek($this->zip_fd, $v_size-$v_maximum_size);
if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size)){
return FALSE;
}
$v_pos = ftell($this->zip_fd);
$v_bytes = 0x00000000;
while ($v_pos < $v_size){
$v_byte = @fread($this->zip_fd, 1);
$v_bytes = ($v_bytes << 8) | Ord($v_byte);
if ($v_bytes == 0x504b0506){
$v_pos++;
break;
}
$v_pos++;
}
if ($v_pos == $v_size){
return FALSE;
}
}
$v_binary_data = fread($this->zip_fd,18);
if (strlen($v_binary_data) != 18){
return FALSE;
}
$v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data);
if ($v_data['comment_size'] != 0){
$p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']);
}else{
$p_central_dir['comment'] = '';
}
$p_central_dir['entries'] = $v_data['entries'];
$p_central_dir['disk_entries'] = $v_data['disk_entries'];
$p_central_dir['offset'] = $v_data['offset'];
$p_central_dir['size'] = $v_data['size'];
$p_central_dir['disk'] = $v_data['disk'];
$p_central_dir['disk_start'] = $v_data['disk_start'];
return TRUE;
}
function DisableMagicQuotes(){
if ((!function_exists("get_magic_quotes_runtime"))||(!function_exists("set_magic_quotes_runtime"))){
return TRUE;
}
if ($this->magic_quotes_status != -1) {
return TRUE;
}
$this->magic_quotes_status = @get_magic_quotes_runtime();
if ($this->magic_quotes_status == 1) {
@set_magic_quotes_runtime(0);
}
return TRUE;
}
function SwapBackMagicQuotes(){
if ((!function_exists("get_magic_quotes_runtime"))||(!function_exists("set_magic_quotes_runtime"))) {
return TRUE;
}
if ($this->magic_quotes_status != -1) {
return TRUE;
}
if ($this->magic_quotes_status == 1) {
@set_magic_quotes_runtime($this->magic_quotes_status);
}
return TRUE;
}
}
?>
作者: muqiao 发布时间: 2007-04-14
作者: 纯色理想 发布时间: 2007-05-05
作者: 17too 发布时间: 2007-06-02
作者: 木�^ 发布时间: 2007-06-02
看不懂,也就用不了,不会用的东西如何收藏~?~~
作者: quanhaier 发布时间: 2007-06-07
作者: YYXX 发布时间: 2007-06-07
直接昏了 好歹也分几个块啊 随便注释一下都可以啊 0.0
作者: fzm010 发布时间: 2007-06-07
作者: wukeyuan 发布时间: 2007-06-09
作者: muqiao 发布时间: 2007-06-09
作者: yiqing666 发布时间: 2007-06-12
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28