mirror of
https://github.com/lrsjng/h5ai.git
synced 2025-06-06 17:51:15 -04:00
Clean code.
This commit is contained in:
parent
6c9d480736
commit
65d8aab429
1 changed files with 17 additions and 15 deletions
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
class Archive {
|
class Archive {
|
||||||
|
|
||||||
|
const NULL_BYTE = "\0";
|
||||||
|
|
||||||
private static $SEGMENT_SIZE = 16777216; // 1024 * 1024 * 16 = 16MiB
|
private static $SEGMENT_SIZE = 16777216; // 1024 * 1024 * 16 = 16MiB
|
||||||
private static $TAR_PASSTHRU_CMD = 'cd [ROOTDIR] && tar --no-recursion -c -- [DIRS] [FILES]';
|
private static $TAR_PASSTHRU_CMD = 'cd [ROOTDIR] && tar --no-recursion -c -- [DIRS] [FILES]';
|
||||||
private static $ZIP_PASSTHRU_CMD = 'cd [ROOTDIR] && zip - -- [FILES]';
|
private static $ZIP_PASSTHRU_CMD = 'cd [ROOTDIR] && zip - -- [FILES]';
|
||||||
|
@ -93,7 +95,7 @@ class Archive {
|
||||||
$this->print_file($real_file);
|
$this->print_file($real_file);
|
||||||
|
|
||||||
if ($size % 512 != 0) {
|
if ($size % 512 != 0) {
|
||||||
echo str_repeat("\0", 512 - ($size % 512));
|
echo str_repeat(Archive::NULL_BYTE, 512 - ($size % 512));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,25 +111,25 @@ class Archive {
|
||||||
}
|
}
|
||||||
|
|
||||||
$header =
|
$header =
|
||||||
str_pad($name, 100, "\0") // filename [100]
|
str_pad($name, 100, Archive::NULL_BYTE) // filename [100]
|
||||||
. "0000755\0" // file mode [8]
|
. '0000755' . Archive::NULL_BYTE // file mode [8]
|
||||||
. "0000000\0" // uid [8]
|
. '0000000' . Archive::NULL_BYTE // uid [8]
|
||||||
. "0000000\0" // gid [8]
|
. '0000000' . Archive::NULL_BYTE // gid [8]
|
||||||
. str_pad(decoct($size), 11, "0", STR_PAD_LEFT) . "\0" // file size [12]
|
. str_pad(decoct($size), 11, '0', STR_PAD_LEFT) . Archive::NULL_BYTE // file size [12]
|
||||||
. str_pad(decoct($mtime), 11, "0", STR_PAD_LEFT) . "\0" // file modification time [12]
|
. str_pad(decoct($mtime), 11, '0', STR_PAD_LEFT) . Archive::NULL_BYTE // file modification time [12]
|
||||||
. " " // checksum [8]
|
. ' ' // checksum [8]
|
||||||
. str_pad($type, 1) // file type [1]
|
. str_pad($type, 1) // file type [1]
|
||||||
. str_repeat("\0", 100) // linkname [100]
|
. str_repeat(Archive::NULL_BYTE, 100) // linkname [100]
|
||||||
. "ustar\0" // magic [6]
|
. 'ustar' . Archive::NULL_BYTE // magic [6]
|
||||||
. "00" // version [2]
|
. '00' // version [2]
|
||||||
. str_repeat("\0", 80) // uname, gname, defmajor, devminor [32 + 32 + 8 + 8]
|
. str_repeat(Archive::NULL_BYTE, 80) // uname, gname, defmajor, devminor [32 + 32 + 8 + 8]
|
||||||
. str_pad($prefix, 155, "\0") // filename [155]
|
. str_pad($prefix, 155, Archive::NULL_BYTE) // filename [155]
|
||||||
. str_repeat("\0", 12); // fill [12]
|
. str_repeat(Archive::NULL_BYTE, 12); // fill [12]
|
||||||
assert(strlen($header) === 512);
|
assert(strlen($header) === 512);
|
||||||
|
|
||||||
// checksum
|
// checksum
|
||||||
$checksum = array_sum(array_map('ord', str_split($header)));
|
$checksum = array_sum(array_map('ord', str_split($header)));
|
||||||
$checksum = str_pad(decoct($checksum), 6, "0", STR_PAD_LEFT) . "\0 ";
|
$checksum = str_pad(decoct($checksum), 6, '0', STR_PAD_LEFT) . Archive::NULL_BYTE . ' ';
|
||||||
$header = substr_replace($header, $checksum, 148, 8);
|
$header = substr_replace($header, $checksum, 148, 8);
|
||||||
|
|
||||||
return $header;
|
return $header;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue