PHP Conference Japan 2024

gzseek

(PHP 4, PHP 5, PHP 7, PHP 8)

gzseek在gz文件指针上查找

描述

gzseek(资源 $stream, 整数 $offset, 整数 $whence = SEEK_SET): 整数

将给定文件指针的文件位置指示器设置为文件流中给定偏移量字节。 等效于调用(在C中)gzseek(zp, offset, SEEK_SET)

如果文件以只读方式打开,则模拟此函数,但这可能非常慢。如果文件以写入方式打开,则仅支持向前查找;gzseek() 然后将一系列零压缩到新的起始位置。

参数

gz文件指针。它必须有效,并且必须指向由gzopen()成功打开的文件。

偏移量

查找的偏移量。

位置

whence 值为

  • SEEK_SET - 将位置设置为等于offset 字节。
  • SEEK_CUR - 将位置设置为当前位置加上offset

如果未指定whence,则假定为SEEK_SET

返回值

成功时返回0;否则返回-1。请注意,查找超过文件结尾不被认为是错误。

示例

示例 #1 gzseek() 示例

<?php
$gz
= gzopen('somefile.gz', 'r');
gzseek($gz,2);
echo
gzgetc($gz);
gzclose($gz);
?>

参见

  • gztell() - 获取gz文件指针的读/写位置
  • gzrewind() - 倒回gz文件指针的位置

添加注释

用户贡献的注释 2 个注释

liuhaifeng at example dot com
12 年前
由于查找文件末尾之后不被视为错误,我怀疑“while (gzseek ($fh, $eof) == 0) $eof += $d;” 会进入无限循环。
dperham at wgate dot com
19 年前
PHP/4.3.9
与注释相反,如果我尝试查找文件末尾之后,gzseek() 返回 -1。这是一个返回最后一个可查找位置并将文件指针放在那里的函数。

/** 将文件指针设置为文件末尾
* 并返回文件中的字节数。
*/
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;
}
To Top