gzseek

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

gzseekPositioniert den gz-Dateizeiger

Beschreibung

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

Setzt die Schreib-/Leseposition für die angegebene Datei. Dies entspricht dem C-API Aufruf gzseek(zp, offset, SEEK_SET).

Wenn die Datei für Lesezugriffe geöffnet ist, wird diese Funktion emuliert und kann sehr langsam sein. Wenn die Datei zum Schreiben geöffnet ist, kann nur vorwärts positioniert werden; die Funktion komprimiert dann eine Sequenz von Nullbytes, um die gewünschte Position zu erreichen.

Parameter-Liste

stream

Der gz-Dateizeiger. Dieser muss auf eine gültige, erfolgreich mit gzopen() geöffnete Datei zeigen.

offset

Die gewünschte Position.

whence

whence gibt an, auf welche Anfangsposition sich offset bezieht. Mögliche Werte sind:

  • SEEK_SET - Setzt die Position auf offset Bytes vom Dataianfang.
  • SEEK_CUR - Verschiebt die Position um offset Bytes ausgehend von der aktuellen Position.

Wird whence nicht angegeben, so wird SEEK_SET angenommen.

Rückgabewerte

Gibt 0 bei Erfolg und -1 bei Fehlern zurück. Beachten Sie, dass eine Suche über das Dateiende hinaus nicht als Fehler gilt.

Beispiele

Beispiel #1 gzseek()-Beispiel

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

Siehe auch

  • gztell() - Ermittelt die aktuelle Position eines gz-Dateizeigers
  • gzrewind() - Setzt den gz-Dateizeiger auf den Anfang zurück

add a note

User Contributed Notes 2 notes

up
0
liuhaifeng at example dot com
11 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.
up
0
dperham at wgate dot com
19 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;
}
To Top