PHP: gzseek - Manual
(PHP 4, PHP 5, PHP 7, PHP 8)
gzseek — Seek on a gz-file pointer
Description
If the file is opened for reading, this function is emulated but can be extremely slow. If the file is opened for writing, only forward seeks are supported; gzseek() then compresses a sequence of zeroes up to the new starting position.
Parameters
stream-
The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().
offset-
The seeked offset.
whence-
whencevalues are:SEEK_SET- Set position equal tooffsetbytes.SEEK_CUR- Set position to current location plusoffset.
If
whenceis not specified, it is assumed to beSEEK_SET.
Return Values
Upon success, returns 0; otherwise, returns -1. Note that seeking past EOF is not considered an error.
Examples
Example #1 gzseek() example
<?php
$gz = gzopen('somefile.gz', 'r');
gzseek($gz,2);
echo gzgetc($gz);
gzclose($gz);
?>See Also
- gztell() - Tell gz-file pointer read/write position
- gzrewind() - Rewind the position of a gz-file pointer
Found A Problem?
liuhaifeng at example dot com ¶
13 years ago
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.21 years ago
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;
}