PHP 5.6.0RC3 is available

gzseek

(PHP 4, PHP 5)

gzseekPositioniert innerhalb einer gz-Datei

Beschreibung

int gzseek ( resource $zp , int $offset [, int $whence = SEEK_SET ] )

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

zp

Die gz-Datei Resource. Dies 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 das 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 in einer gz-Datei
  • gzrewind() - Setzt die Dateiposition auf den Anfang zurück

add a note add a note

User Contributed Notes 2 notes

up
0
liuhaifeng at example dot com
1 year 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
9 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