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\Zip64;
6
 
7
use ZipStream\PackField;
8
 
9
/**
10
 * @internal
11
 */
12
abstract class EndOfCentralDirectory
13
{
14
    private const SIGNATURE = 0x06064b50;
15
 
16
    public static function generate(
17
        int $versionMadeBy,
18
        int $versionNeededToExtract,
19
        int $numberOfThisDisk,
20
        int $numberOfTheDiskWithCentralDirectoryStart,
21
        int $numberOfCentralDirectoryEntriesOnThisDisk,
22
        int $numberOfCentralDirectoryEntries,
23
        int $sizeOfCentralDirectory,
24
        int $centralDirectoryStartOffsetOnDisk,
25
        string $extensibleDataSector,
26
    ): string {
27
        $recordSize = 44 + strlen($extensibleDataSector); // (length of block - 12) = 44;
28
 
29
        /** @psalm-suppress MixedArgument */
30
        return PackField::pack(
31
            new PackField(format: 'V', value: static::SIGNATURE),
32
            new PackField(format: 'P', value: $recordSize),
33
            new PackField(format: 'v', value: $versionMadeBy),
34
            new PackField(format: 'v', value: $versionNeededToExtract),
35
            new PackField(format: 'V', value: $numberOfThisDisk),
36
            new PackField(format: 'V', value: $numberOfTheDiskWithCentralDirectoryStart),
37
            new PackField(format: 'P', value: $numberOfCentralDirectoryEntriesOnThisDisk),
38
            new PackField(format: 'P', value: $numberOfCentralDirectoryEntries),
39
            new PackField(format: 'P', value: $sizeOfCentralDirectory),
40
            new PackField(format: 'P', value: $centralDirectoryStartOffsetOnDisk),
41
        ) . $extensibleDataSector;
42
    }
43
}