Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace ZipStream;
6
 
7
use DateTimeInterface;
8
 
9
/**
10
 * @internal
11
 */
12
abstract class CentralDirectoryFileHeader
13
{
14
    private const SIGNATURE = 0x02014b50;
15
 
16
    public static function generate(
17
        int $versionMadeBy,
18
        int $versionNeededToExtract,
19
        int $generalPurposeBitFlag,
20
        CompressionMethod $compressionMethod,
21
        DateTimeInterface $lastModificationDateTime,
22
        int $crc32,
23
        int $compressedSize,
24
        int $uncompressedSize,
25
        string $fileName,
26
        string $extraField,
27
        string $fileComment,
28
        int $diskNumberStart,
29
        int $internalFileAttributes,
30
        int $externalFileAttributes,
31
        int $relativeOffsetOfLocalHeader,
32
    ): string {
33
        return PackField::pack(
34
            new PackField(format: 'V', value: self::SIGNATURE),
35
            new PackField(format: 'v', value: $versionMadeBy),
36
            new PackField(format: 'v', value: $versionNeededToExtract),
37
            new PackField(format: 'v', value: $generalPurposeBitFlag),
38
            new PackField(format: 'v', value: $compressionMethod->value),
39
            new PackField(format: 'V', value: Time::dateTimeToDosTime($lastModificationDateTime)),
40
            new PackField(format: 'V', value: $crc32),
41
            new PackField(format: 'V', value: $compressedSize),
42
            new PackField(format: 'V', value: $uncompressedSize),
43
            new PackField(format: 'v', value: strlen($fileName)),
44
            new PackField(format: 'v', value: strlen($extraField)),
45
            new PackField(format: 'v', value: strlen($fileComment)),
46
            new PackField(format: 'v', value: $diskNumberStart),
47
            new PackField(format: 'v', value: $internalFileAttributes),
48
            new PackField(format: 'V', value: $externalFileAttributes),
49
            new PackField(format: 'V', value: $relativeOffsetOfLocalHeader),
50
        ) . $fileName . $extraField . $fileComment;
51
    }
52
}