aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/maennchen/zipstream-php/src/CentralDirectoryFileHeader.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/maennchen/zipstream-php/src/CentralDirectoryFileHeader.php')
-rw-r--r--vendor/maennchen/zipstream-php/src/CentralDirectoryFileHeader.php52
1 files changed, 52 insertions, 0 deletions
diff --git a/vendor/maennchen/zipstream-php/src/CentralDirectoryFileHeader.php b/vendor/maennchen/zipstream-php/src/CentralDirectoryFileHeader.php
new file mode 100644
index 000000000..ffcfc6e97
--- /dev/null
+++ b/vendor/maennchen/zipstream-php/src/CentralDirectoryFileHeader.php
@@ -0,0 +1,52 @@
+<?php
+
+declare(strict_types=1);
+
+namespace ZipStream;
+
+use DateTimeInterface;
+
+/**
+ * @internal
+ */
+abstract class CentralDirectoryFileHeader
+{
+ private const SIGNATURE = 0x02014b50;
+
+ public static function generate(
+ int $versionMadeBy,
+ int $versionNeededToExtract,
+ int $generalPurposeBitFlag,
+ CompressionMethod $compressionMethod,
+ DateTimeInterface $lastModificationDateTime,
+ int $crc32,
+ int $compressedSize,
+ int $uncompressedSize,
+ string $fileName,
+ string $extraField,
+ string $fileComment,
+ int $diskNumberStart,
+ int $internalFileAttributes,
+ int $externalFileAttributes,
+ int $relativeOffsetOfLocalHeader,
+ ): string {
+ return PackField::pack(
+ new PackField(format: 'V', value: self::SIGNATURE),
+ new PackField(format: 'v', value: $versionMadeBy),
+ new PackField(format: 'v', value: $versionNeededToExtract),
+ new PackField(format: 'v', value: $generalPurposeBitFlag),
+ new PackField(format: 'v', value: $compressionMethod->value),
+ new PackField(format: 'V', value: Time::dateTimeToDosTime($lastModificationDateTime)),
+ new PackField(format: 'V', value: $crc32),
+ new PackField(format: 'V', value: $compressedSize),
+ new PackField(format: 'V', value: $uncompressedSize),
+ new PackField(format: 'v', value: strlen($fileName)),
+ new PackField(format: 'v', value: strlen($extraField)),
+ new PackField(format: 'v', value: strlen($fileComment)),
+ new PackField(format: 'v', value: $diskNumberStart),
+ new PackField(format: 'v', value: $internalFileAttributes),
+ new PackField(format: 'V', value: $externalFileAttributes),
+ new PackField(format: 'V', value: $relativeOffsetOfLocalHeader),
+ ) . $fileName . $extraField . $fileComment;
+ }
+}