Gzrewind: примеры (PHP)

Использование gzrewind для работы со сжатыми файлами
Раздел: Сжатие
gzrewind(resource $stream): bool

Функция gzrewind в PHP

Функция gzrewind выполняет сброс указателя позиции в gz-файле к началу потока. Она используется при работе со сжатыми файлами, когда требуется повторно прочитать данные с самого начала без повторного открытия файла.

Аргументы функции
  • $stream (ресурс) — обязательный аргумент. Указатель на gz-файл, который должен быть корректным и открытым с помощью функции gzopen.
Возвращаемое значение

Функция возвращает true при успешном выполнении или false при возникновении ошибки, например, если передан недопустимый указатель файла.

Примеры использования gzrewind

Пример 1: Базовое использование

Сброс указателя перед повторным чтением файла:

$fp = gzopen('example.gz', 'r');
echo gzread($fp, 10); // Прочитано 10 байт
gzrewind($fp); // Возврат к началу файла
echo gzread($fp, 10); // Снова читаем первые 10 байт
gzclose($fp);
Первые 10Первые 10
Пример 2: Проверка возвращаемого значения
$fp = gzopen('data.gz', 'r');
if (gzrewind($fp)) {
    echo 'Указатель успешно сброшен';
} else {
    echo 'Ошибка сброса указателя';
}
gzclose($fp);
Указатель успешно сброшен

Похожие функции в PHP

  • gzseek — устанавливает указатель файла на конкретную позицию. Позволяет переместиться в любое место файла, а не только в начало.
  • rewind — аналог для несжатых файлов. Работает с обычными файловыми указателями, открытыми через fopen.
  • fseek — более гибкая функция позиционирования для обычных файлов.

Функцию gzrewind применяют именно для gzip-потоков, когда нужно вернуться к началу. Для произвольного позиционирования используют gzseek.

Аналоги в других языках

Gzrewind в Python

Модуль gzip предоставляет метод seek:

import gzip
with gzip.open('example.gz', 'rt') as f:
    print(f.read(10))
    f.seek(0)  # Аналог gzrewind
    print(f.read(10))
JavaScript (Node.js)

Модуль zlib не имеет прямой функции перемотки. Обычно поток читается заново:

const zlib = require('zlib');
const fs = require('fs');
const stream = fs.createReadStream('example.gz')
    .pipe(zlib.createGunzip());
// Для повторного чтения нужно создать новый поток

Gzrewind в MySQL

Прямого аналога нет. Для работы со сжатыми данными используют функции COMPRESS и UNCOMPRESS, но без поточного доступа.

Типичные ошибки

Ошибка 1: Недопустимый указатель файла
$result = gzrewind('not_a_resource');
var_dump($result);
Warning: gzrewind() expects parameter 1 to be resource, string given
bool(false)
Ошибка 2: Закрытый ресурс
$fp = gzopen('test.gz', 'r');
gzclose($fp);
$result = gzrewind($fp);
var_dump($result);
Warning: gzrewind(): supplied resource is not a valid stream resource
bool(false)
Ошибка 3: Попытка перемотки в режиме записи
$fp = gzopen('output.gz', 'w');
gzwrite($fp, 'Some data');
$result = gzrewind($fp); // Может не поддерживаться
gzclose($fp);

В режиме записи поведение может быть неопределенным.

Изменения в версиях PHP

  • В PHP 8.0.0 функция теперь выбрасывает ошибку типа TypeError при передаче аргумента некорректного типа, вместо генерации предупреждения и возврата false.
  • До PHP 8.0.0 функция молча возвращала false при ошибках, что могло приводить к незамеченным проблемам.

Расширенные примеры

Пример 1: Обработка большого файла по частям
Пример php
$fp = gzopen('large.gz', 'r');
$chunkSize = 1024;
// Первое чтение
while (!gzeof($fp)) {
    echo gzread($fp, $chunkSize);
}
// Возврат и повторная обработка
gzrewind($fp);
$lineCount = 0;
while (!gzeof($fp)) {
    gzgets($fp);
    $lineCount++;
}
echo "Файл содержит $lineCount строк";
gzclose($fp);
Пример 2: Комбинирование с gztell
Пример php
$fp = gzopen('data.gz', 'r');
gzread($fp, 50);
echo 'Позиция: ' . gztell($fp) . "\n";
gzrewind($fp);
echo 'Позиция после rewind: ' . gztell($fp) . "\n";
gzclose($fp);
Позиция: 50
Позиция после rewind: 0
Пример 3: Чтение заголовка и данных
Пример php
$fp = gzopen('archive.gz', 'r');
$header = gzread($fp, 20); // Чтение заголовка
gzrewind($fp); // Возврат для полного чтения
$fullContent = gzread($fp, 1000);
gzclose($fp);

PHP gzrewind function comments

En
Gzrewind Rewind the position of a gz-file pointer