PHP Conference Nagoya 2025

gzseek

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

gzseekDéplace le pointeur de lecture

Description

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

gzseek() place le pointeur de lecture du fichier zp à la position offset, comptée en octets depuis le début du fichier. C'est l'équivalent de la fonction gzseek(zp, offset, SEEK_SET), du langage C.

Si le fichier est ouvert en lecture, cette fonction est alors émulée, et se révèle extrêmement lente. Si le fichier est ouvert en écriture, seuls les déplacements vers l'avant sont supportés : gzseek() compresse alors une série de zéros jusqu'à la nouvelle position.

Liste de paramètres

stream

Le pointeur de fichier gz. Il doit être valide et doit pointer vers un fichier ouvert avec succès grâce à la fonction gzopen().

offset

La position désirée.

whence

Les valeurs de whence sont :

  • SEEK_SET : ramène la position à l'offset.
  • SEEK_CUR : ramène la position à la position actuelle plus offset.

Si whence n'est pas spécifié, il vaut par défaut SEEK_SET.

Valeurs de retour

0 en cas de réussite, -1 sinon. Notez que placer le pointeur au delà de la fin du fichier n'est pas considéré comme une erreur.

Exemples

Exemple #1 Exemple avec gzseek()

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

Voir aussi

  • gztell() - Lit la position courante du pointeur de lecture
  • gzrewind() - Replace le pointeur au début du fichier

add a note

User Contributed Notes 2 notes

up
0
liuhaifeng at example dot com
12 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