1<?php
2
3declare(strict_types=1);
4
5namespace MaxMind\Db\Reader;
6
7class Util
8{
9    /**
10     * @param resource $stream
11     */
12    public static function read($stream, int $offset, int $numberOfBytes): string
13    {
14        if ($numberOfBytes === 0) {
15            return '';
16        }
17        if (fseek($stream, $offset) === 0) {
18            $value = fread($stream, $numberOfBytes);
19
20            // We check that the number of bytes read is equal to the number
21            // asked for. We use ftell as getting the length of $value is
22            // much slower.
23            if ($value !== false && ftell($stream) - $offset === $numberOfBytes) {
24                return $value;
25            }
26        }
27        throw new InvalidDatabaseException(
28            'The MaxMind DB file contains bad data'
29        );
30    }
31}
32