2024 日本 PHP 研討會

gzseek

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

gzseek在 gz 檔案指標上搜尋

說明

gzseek(資源 $stream, int $offset, int $whence = SEEK_SET): int

設定指定檔案指標的檔案位置指示器,指向檔案串流中指定的位元組偏移量。相當於(在 C 語言中)呼叫 gzseek(zp, offset, SEEK_SET)

如果檔案是以讀取模式開啟,則此函式會被模擬,但速度可能會非常慢。如果檔案是以寫入模式開啟,則僅支援向前搜尋;gzseek() 會將一系列零壓縮到新的起始位置。

參數

stream

gz 檔案指標。它必須有效,且必須指向由 gzopen() 成功開啟的檔案。

offset

搜尋的偏移量。

whence

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 則註解

0
liuhaifeng at example dot com
12 年前
由於搜尋超過檔案結尾不被視為錯誤,我懷疑 "while (gzseek ($fh, $eof) == 0) $eof += $d;" 會進入無限迴圈。
0
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