W3docs

rewind()

Apprenez comment rewind() de PHP remet le pointeur de fichier au début pour le relire. Syntaxe, valeur de retour, exemples et comparaison avec fseek().

Introduction

Lorsque vous ouvrez un fichier en PHP, le système maintient un pointeur de fichier — une position interne qui indique où se produira la prochaine lecture ou écriture. Chaque fois que vous lisez avec fgets() ou fread(), ce pointeur avance. La fonction rewind() ramène le pointeur tout au début du fichier (octet 0) afin que vous puissiez le relire depuis le début sans avoir à le fermer et à le rouvrir.

Ce chapitre explique ce que fait rewind(), sa syntaxe et sa valeur de retour, et quand l'utiliser à la place de fseek().

Syntaxe

rewind(resource $stream): bool
  • $stream — un pointeur de fichier retourné par fopen() (ou une ressource de flux similaire). Le flux doit être valide et accessible par déplacement.
  • Retourne true en cas de succès et false en cas d'échec.

Appeler rewind($stream) est équivalent à fseek($stream, 0) : les deux déplacent le pointeur au début du fichier. Utilisez ftell() à tout moment pour lire la position actuelle du pointeur.

Remarque : Sur les flux ouverts en mode ajout ('a' ou 'a+'), le pointeur de lecture est déplacé au début, mais les écritures sont toujours ajoutées à la fin du fichier.

Exemple : relire un fichier depuis le début

Après avoir lu une partie d'un fichier, rewind() vous permet de recommencer depuis le début :

<?php

$handle = fopen('notes.txt', 'r');

// Read the first line — this advances the pointer
echo fgets($handle);                       // e.g. "First line"
echo 'Pointer is at: ' . ftell($handle);   // a non-zero byte offset

// Send the pointer back to the beginning
rewind($handle);
echo 'After rewind: ' . ftell($handle);    // 0

// Re-read the same first line
echo fgets($handle);                        // "First line" again

fclose($handle);

Le premier fgets() lit une ligne et laisse le pointeur quelque part dans le fichier, si bien que ftell() signale un décalage non nul. Après rewind(), ftell() retourne 0, et la prochaine lecture recommence depuis le premier octet.

Quand utiliser rewind()

  • Deux passages sur le même fichier. Par exemple, compter les lignes d'un fichier, puis boucler à nouveau pour les traiter — sans rouvrir le fichier.
  • Réinitialiser après une écriture. Vous écrivez dans un flux temporaire, puis rewind() et vous relisez ce que vous venez d'écrire.
  • Relire un flux dont vous n'avez qu'une poignée, comme php://memory ou php://temp.

Préférez fseek() lorsque vous devez sauter à un décalage arbitraire plutôt qu'au tout début. Pour les handles de répertoire, l'équivalent de réinitialisation est rewinddir().

Pièges courants

  • Flux non accessibles par déplacement. Certains flux (sockets réseau, certains pipes) ne peuvent pas être rembobinés ; rewind() retourne false. Vérifiez toujours la valeur de retour si le flux pourrait ne pas être accessible par déplacement.
  • Confusion entre les pointeurs de lecture et d'écriture en mode ajout. En mode 'a'/'a+', le rembobinage ne permet pas d'écraser depuis le début — les nouvelles données sont toujours ajoutées à la fin.
  • Oublier que les lectures avancent toujours le pointeur. rewind() ne fait que réinitialiser la position ; le prochain fgets()/fread() le déplacera à nouveau vers l'avant.

Conclusion

rewind() remet le pointeur de fichier au début du fichier pour que vous puissiez le relire depuis le début. Elle retourne true en cas de succès et false en cas d'échec, et se comporte comme fseek($stream, 0). Elle s'associe naturellement à fopen(), fgets(), ftell() et fseek() lorsque vous avez besoin d'effectuer plus d'un passage sur le même fichier ou flux.

Pratique

Pratique
Que fait la fonction PHP 'rewind()' ?
Que fait la fonction PHP 'rewind()' ?
Was this page helpful?