📄 zip.lib.php
字号:
$header['stored_filename'] = $header['filename'];
if (substr($header['filename'], -1) == '/')
$header['external'] = 0x41FF0010;
else $header['external'] = 0x0;
$header['status'] = "ok";
return $header;
}
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);
if ($header['filename_len'] != 0)
$header['filename'] = fread($zip,$header['filename_len']);
else $header['filename'] = '';
if ($header['extra_len'] != 0)
$header['extra'] = fread($zip, $header['extra_len']);
else $header['extra'] = '';
if ($header['comment_len'] != 0)
$header['comment'] = fread($zip, $header['comment_len']);
else $header['comment'] = '';
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;
else $header['external'] = 0x0;
return $header;
}
function ReadCentralDir($zip,$zip_name)
{
$size = filesize($zip_name);
if ($size < 277) $maximum_size = $size;
else $maximum_size=277;
@fseek($zip, $size-$maximum_size);
$pos = ftell($zip); $bytes = 0x00000000;
while ($pos < $size)
{
$byte = @fread($zip, 1); $bytes=($bytes << 8) | Ord($byte);
if ($bytes == 0x504b0506){ $pos++; break; } $pos++;
}
$data=unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', fread($zip, 18));
if ($data['comment_size'] != 0) $centd['comment'] = fread($zip, $data['comment_size']);
else $centd['comment'] = '';
$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;
}
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']));
$sAllPathName = $to;
for($i=0;isset($pth[$i]);$i++)
{
if(!$pth[$i]) continue;
$sAllPathName .= $pth[$i]."/";
if(!is_dir($sAllPathName)) @mkdir($sAllPathName,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("Can not open the archive file!");
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;
}
//增加文件
function AddFile($sFileName, $compact = 1)
{
if (!file_exists($sFileName)) return false;
else
{
$fd = fopen ($sFileName, "rb");
$contents = fread ($fd, filesize($sFileName));
fclose ($fd);
}
//echo $sFileName;
$aFiles = Array(Array(basename($sFileName),$contents));
return $this->Add($aFiles,$compact);
}
//增加一个目录下的所有文件和子目录
function AddDir($sRootDir,$compact = 1,$sSubDir="")
{
if ((substr($sRootDir,-1) != "/") && (substr($sRootDir,-1) != "\\")) $sRootDir .= "/";
if (($sSubDir != "") && (substr($sSubDir,-1) != "/") && (substr($sSubDir,-1) != "\\")) $sSubDir .= "/";
$handle = @opendir($sRootDir . $sSubDir);
while ($tName = readdir($handle))
{
if (($tName == ".") ||($tName == "..")) continue;
if (is_dir($sRootDir . $sSubDir . $tName)) $this->AddDir($sRootDir,$compact, $sSubDir . $tName . "/");
else
{
$fd = fopen ($sRootDir . $sSubDir . $tName, "rb");
$contents = fread ($fd, filesize($sRootDir . $sSubDir . $tName));
fclose ($fd);
$aFiles = Array(Array($sSubDir . $tName,$contents));
$this->Add($aFiles,$compact);
}
}
closedir($handle);
}
}
/*
增加一个文件
$z = new Zip;
$z->AddFile("the/file.name",1);
增加一个目录
$z = new Zip;
$z->AddDir("the/dir/name",1);
解压缩
$z = new Zip;
$z->Extract("styles.zip","testzip");
*/
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -