W3docs

rewind()

Aprende cómo rewind() de PHP reinicia el puntero de archivo al inicio para releerlo. Cubre sintaxis, valor de retorno, ejemplos y fseek() vs rewind().

Introducción

Cuando abres un archivo en PHP, el sistema mantiene un seguimiento de un puntero de archivo — una posición interna que marca dónde ocurrirá la próxima lectura o escritura. Cada vez que lees con fgets() o fread(), ese puntero avanza. La función rewind() envía el puntero de vuelta al principio del archivo (byte 0) para que puedas leerlo nuevamente desde el inicio sin cerrar y volver a abrir el archivo.

Este capítulo explica qué hace rewind(), su sintaxis y valor de retorno, y cuándo deberías usarla en lugar de fseek().

Sintaxis

rewind(resource $stream): bool
  • $stream — un puntero de archivo devuelto por fopen() (o un recurso de flujo similar). El flujo debe ser válido y permitir búsqueda.
  • Devuelve true en caso de éxito y false en caso de fallo.

Llamar a rewind($stream) es equivalente a fseek($stream, 0): ambos mueven el puntero al inicio del archivo. Usa ftell() en cualquier momento para leer la posición actual del puntero.

Nota: En flujos abiertos en modo de anexo ('a' o 'a+'), el puntero de lectura se mueve al principio, pero las escrituras siguen añadiéndose al final del archivo.

Ejemplo: releer un archivo desde el inicio

Después de leer parte de un archivo, rewind() te permite empezar de nuevo desde el principio:

<?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);

El primer fgets() lee una línea y deja el puntero a mitad del archivo, por lo que ftell() reporta un desplazamiento distinto de cero. Después de rewind(), ftell() devuelve 0, y la próxima lectura comienza nuevamente desde el primer byte.

Cuándo usar rewind()

  • Dos pasadas sobre el mismo archivo. Por ejemplo, contar las líneas de un archivo y luego recorrerlo de nuevo para procesarlas — sin volver a abrirlo.
  • Reiniciar tras una escritura. Escribes en un flujo temporal, luego haces rewind() y lees lo que acabas de escribir.
  • Releer un flujo del que solo tienes un identificador, como php://memory o php://temp.

Recurre a fseek() cuando necesites saltar a un desplazamiento arbitrario en lugar del principio del archivo. Para identificadores de directorio, el reinicio equivalente es rewinddir().

Errores comunes

  • Flujos no buscables. Algunos flujos (sockets de red, ciertos pipes) no pueden rebobinarse; rewind() devuelve false. Comprueba siempre el valor de retorno si el flujo puede no ser buscable.
  • Confundir los punteros de lectura y escritura en modo de anexo. En el modo 'a'/'a+', rebobinar no permite sobrescribir desde el inicio — los nuevos datos siguen yendo al final.
  • Olvidar que las lecturas avanzan el puntero. rewind() solo reinicia la posición; el siguiente fgets()/fread() lo moverá hacia adelante de nuevo.

Conclusión

rewind() reinicia un puntero de archivo al inicio del archivo para que puedas releerlo desde el principio. Devuelve true en caso de éxito y false en caso de fallo, y se comporta como fseek($stream, 0). Funciona de forma natural junto con fopen(), fgets(), ftell() y fseek() cuando necesitas hacer más de una pasada sobre el mismo archivo o flujo.

Práctica

Práctica
¿Qué hace la función 'rewind()' de PHP?
¿Qué hace la función 'rewind()' de PHP?
Was this page helpful?