Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
Downloads
/
vfm-admin
/
assets
/
zipstream
/
grandt
/
phpzipmerge
/
src
/
ZipMerge
/
Zip
/
Core
/
Header
:
AbstractZipHeader.php
Voltar
Back Up
Advanced Editor
Save
<?php /** * * @author A. Grandt <php@grandt.com> * * Classes to assist in handling the header structures in Zip Files. * */ namespace ZipMerge\Zip\Core\Header; abstract class AbstractZipHeader { const ZIP_CENTRAL_FILE_HEADER = "PK\x01\x02"; // Central file header signature const ZIP_LOCAL_FILE_HEADER = "PK\x03\x04"; // Local file header signature const ZIP_LOCAL_DATA_DESCRIPTOR = "PK\x07\x08"; // Local Header, data descriptor const ZIP_END_OF_CENTRAL_DIRECTORY = "PK\x05\x06"; // End of Central directory record const EXT_FILE_ATTR_DIR = "\x10\x40\xed\x41"; // Unix : Dir + mod:755 const EXT_FILE_ATTR_FILE = "\x00\x40\xa4\x81"; // Unix : File + mod:644 const ATTR_VERSION_TO_EXTRACT = "\x14\x00"; // Version needed to extract = 20 (File is compressed using Deflate compression) const ATTR_MADE_BY_VERSION = "\x1E\x03"; // Made By Version const NULL_BYTE = "\x00"; const NULL_WORD = "\x00\x00"; const NULL_DWORD = "\x00\x00\x00\x00"; abstract public function parseHeader($handle); public static function pathJoin($dir, $file) { $rv = $dir . (empty($dir) || empty($file) ? '' : '/') . $file; return str_replace('//', '/', $rv); } public static function seekPKHeader($handle) { $pkHeader = false; $curr = fgetc($handle); do { $prev = $curr; $curr = fgetc($handle); $pk = $prev == "P" && $curr == "K"; if ($pk) { $b1 = fgetc($handle); $b2 = fgetc($handle); if ($b1 == "\x01" && $b2 == "\x02") { $pkHeader = self::ZIP_CENTRAL_FILE_HEADER; } else if ($b1 == "\x03" && $b2 == "\x04") { $pkHeader = self::ZIP_LOCAL_FILE_HEADER; } else if ($b1 == "\x05" && $b2 == "\x06") { $pkHeader = self::ZIP_END_OF_CENTRAL_DIRECTORY; } else if ($b1 == "\x07" && $b2 == "\x08") { $pkHeader = self::ZIP_LOCAL_DATA_DESCRIPTOR; } else { fseek($handle, -2, SEEK_CUR); $pk = false; } } } while (!$pk && !feof($handle)); fseek($handle, -4, SEEK_CUR); return $pkHeader; } }