©
本文档使用 PHP中文网手册 发布
(PHP 4, PHP 5)
gzseek — Seek on a gz-file pointer
$zp
, int $offset
[, int $whence
= SEEK_SET
] )Sets the file position indicator for the given file pointer to the given offset byte into the file stream. Equivalent to calling (in C) gzseek(zp, offset, SEEK_SET).
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.
zp
The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen() .
offset
The seeked offset.
whence
whence
values are:
SEEK_SET
- Set position equal to offset
bytes.SEEK_CUR
- Set position to current location plus offset
.
If whence
is not specified, it is assumed to be
SEEK_SET
.
Upon success, returns 0; otherwise, returns -1. Note that seeking past EOF is not considered an error.
Example #1 gzseek() example
<?php
$gz = gzopen ( 'somefile.gz' , 'r' );
gzseek ( $gz , 2 );
echo gzgetc ( $gz );
gzclose ( $gz );
?>
[#1] liuhaifeng at example dot com [2012-10-15 05:43:38]
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.
[#2] dperham at wgate dot com [2005-04-12 08:47:52]
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.
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;
}