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 LocalFileHeader
13
{
14
    private const SIGNATURE = 0x04034b50;
15
 
16
    public static function generate(
17
        int $versionNeededToExtract,
18
        int $generalPurposeBitFlag,
19
        CompressionMethod $compressionMethod,
20
        DateTimeInterface $lastModificationDateTime,
21
        int $crc32UncompressedData,
22
        int $compressedSize,
23
        int $uncompressedSize,
24
        string $fileName,
25
        string $extraField,
26
    ): string {
27
        return PackField::pack(
28
            new PackField(format: 'V', value: self::SIGNATURE),
29
            new PackField(format: 'v', value: $versionNeededToExtract),
30
            new PackField(format: 'v', value: $generalPurposeBitFlag),
31
            new PackField(format: 'v', value: $compressionMethod->value),
32
            new PackField(format: 'V', value: Time::dateTimeToDosTime($lastModificationDateTime)),
33
            new PackField(format: 'V', value: $crc32UncompressedData),
34
            new PackField(format: 'V', value: $compressedSize),
35
            new PackField(format: 'V', value: $uncompressedSize),
36
            new PackField(format: 'v', value: strlen($fileName)),
37
            new PackField(format: 'v', value: strlen($extraField)),
38
        ) . $fileName . $extraField;
39
    }
40
}