Anteriormente mostré cómo crear un archivo de texto con php y cómo leerlo. En este post mostraré cómo modificar archivos en PHP que os será muy útil si almacenáis datos en un archivo de texto.
Para poder modificar archivos en PHP es preciso mover el puntero del archivo en el lugar correcto dentro del fichero que deseamos escribir o leer. El puntero es la posición dentro de un archivo que indica donde ocurrirá el próximo acceso del archivo, sea escritura o lectura. Un ejemplo claro es el mítico cursor cuando escribimos en el ordenador, funciona exactamente igual.
Una vez que tenemos en cuenta el puntero, vamos a modificar un archivo de texto llamado prueba.txt:
1 2 3 |
Comienza con Linea 1 Linea 2 Termina con Linea 3 |
Lo que vamos hacer con el siguiente script es copiar la primera línea del archivo y pasarla al final
1 2 3 4 5 6 7 8 9 10 |
<?php $fh = fopen("prueba.txt", 'r+') or die("Ocurrio un error al abrir el archivo"); $texto = fgets($fh); fseek($fh, 0, SEEK_END); fwrite($fh, "$texto") or die("No se puede escribir en el archivo"); fclose($fh); echo "Modificado correctamente"; ?> |
El script abre el archivo de prueba.txt para leer y escribir (+r), poniendo el puntero en el principio. Con la función fgets se lee la primera línea y la almacenamos en una variable. A continuación, con fseek movemos el puntero al final del archivo para luego emplear fwrite y escribir la línea que hemos almacenado en $texto situándolo al final del archivo.
Mover el puntero con fseek
Seguramente te habrás preguntado para que sirve el 0 en fseek. Ese parámetro es cuantas posiciones debería de moverse el puntero hacía atrás partiendo de ese punto. Al emplear 0, indicamos que el puntero debe mantenerse al final del archivo.
Hay otros parámetros con fseek: SEEK_SET y SEEK_CUR. En estos parámetros el número que pasamos tiene una función u otra. En el caso de SEEK_SET, indicamos a la función situar el puntero en el punto exacto. Por ejemplo, si quisiéramos situar el puntero en la posición 12:
1 |
fseek($fh, 12, SEEK_SET); |
Con SEEK_CUR el puntero se sitúa en la posición actual más el valor el que le pasemos. Por ejemplo, si el puntero actual está en la posición 15 pero queremos que esté en el 23, habría que sumarle 8:
1 |
fseek($fh, 8, SEEK_CUR); |
Y hasta aquí cómo modificar archivos en PHP, espero que os haya gustado. A seguir picando 🙂