gzseek
(PHP 4, PHP 5, PHP 7)
gzseek — Перемещает указатель на позицию в gz-файле
Описание
$zp
, int $offset
[, int $whence
= SEEK_SET
] )Устанавливает указатель на позицию в файле, на который ссылается zp. Выполняется смещение потока этого файла на указанное количество байт. Эквивалентно вызову (в C) gzseek(zp, offset, SEEK_SET).
Если файл открыт для чтения, функция эмулируется, при этом будет работать очень медленно. Если файл открыт для записи, разрешено только перемещение вперёд; gzseek() при этом сжимает последовательность нулей до новой позиции.
Список параметров
-
zp
-
Указатель на gz-файл, возвращённый, после его успешного открытия, функцией gzopen().
-
offset
-
Смещение.
-
whence
-
Значения параметра
whence
может быть одним из следующих:SEEK_SET
- Установить абсолютную позицию вoffset
байт.SEEK_CUR
- Установить позицию относительно текущего положения, добавив к нейoffset
.
Если
whence
не указан, используемое по умолчанию значение --SEEK_SET
.
Возвращаемые значения
При успешном завершении возвращает 0; иначе -1. Обратите внимание, что если установленное смещение перемещает указатель на позицию за EOF, это не является ошибкой.
Примеры
Пример #1 Пример использования gzseek()
<?php
$gz = gzopen('somefile.gz', 'r');
gzseek($gz,2);
echo gzgetc($gz);
gzclose($gz);
?>
Смотрите также
- gztell() - Возвращает текущую позицию для чтения/записи в gz-файле
- gzrewind() - Перемещает указатель на позицию в gz-файле в начало
Коментарии
PHP/4.3.9
contrary to the notes, gzseek() returns -1 if I try to seek past the end of the file. here is a function that will return the last seekable position, and put the file pointer there.
/** sets the file pointer at the end of the file
* and returns the number of bytes in the file.
*/
function gzend($fh)
{
$d = 1<<14;
$eof = $d;
while ( gzseek($fh, $eof) == 0 ) $eof += $d;
while ( $d > 1 )
{
$d >>= 1;
$eof += $d * (gzseek($fh, $eof)? -1 : 1);
}
return $eof;
}
Since seek after the end is not considered an error, I doubt that "while (gzseek ($fh, $eof) == 0) $eof += $d;" will get into infinite loop.