Desarrollo

Trabajando con ficheros – escribir en ficheros

Desarrollo PHP

Ya sabemos cómo leer ficheros, ahora toca aprender a escribir en ficheros. Como vimos en el artículo de apertura de ficheros, existen varias formas de abrir los ficheros para su escritura. Algunas de estas formas implican que el archivo exista mientras que otras formas crearán el archivo directamente. Igualmente, hay métodos para añadir texto a un fichero mientras que también encontramos otros métodos que eliminarán todo el contenido antes de escribir.

En este artículo veremos, además, varias formas de escribir en ficheros que podemos usar según nos convenga.

Escribir en ficheros con fwrite

La función básica para escribir en ficheros es fwrite. A este función tenemos que indicarle el fichero que se ha abierto y el string que vamos a escribir en él. Adicionalmente podemos indicarle una longitud máxima, por lo que aunque el string sea más largo, sólo se escribirá hasta alcanzar dicha longitud.

Para el siguiente ejemplo, vamos a abrir el fichero en modo de apertura w que, si recordamos, abría el fichero (o lo intentaba crear si no existía) y eliminaba todo lo que había en su interior, dejándolo preparado para escribir desde cero.

<?php
$fichero = fopen('fichero.txt', 'w');

fwrite($fichero, 'Probando cómo');
fwrite($fichero, ' escribir en');
fwrite($fichero, ' un fichero');
fwrite($fichero, ' gracias a Programación Básica\n');

fwrite($fichero, 'Estamos en una segunda línea' . PHP_EOL);
fwrite($fichero, 'Y ahora en una tercera línea');

fclose($fichero);
?>

Escribir saltos de línea

Por partes. En el anterior ejemplo hemos abierto un fichero para escritura y hemos escrito unas cuantas cosas. Las cuatro primeras escrituras acabarán creando un mensaje, pues no hemos indicado ningún salto de línea al finalizar la escritura. El salto de línea aparece en la cuarta vez que escribimos con el carácter \n que ya hemos visto alguna vez. Este carácter le dice al sistema que inserte un salto de línea.

Sin embargo, el salto de línea también se puede hacer con la constante (en el futuro veremos qué es una constante) PHP_EOL, cuyas siglas, además de PHP, indican end of line, es decir, fin de línea en inglés. Como veis, podemos utilizar ambas opciones indistintamente. Finalmente, nuestro fichero.txt tendría la siguiente información:

Probando cómo escribir en un fichero gracias a Programación Básica
Estamos en una segunda línea
Y ahora en una tercera línea

Añadir contenidos a un fichero

En el ejemplo anterior ya indicamos que, abriéndolo con el modo de apertura w, el contenido que hubiera se eliminaba. Podemos utilizar el método a, más común, o el método c. El primero de ellos, el a, abre el fichero y se coloca al final del mismo para realizar la escritura allí. El segundo de ellos, el c, abre el fichero y se coloca al principio. Veamos un ejemplo:

<?php
$fichero = fopen('fichero.txt', 'w');

fwrite($fichero, 'Probando cómo');
fwrite($fichero, ' escribir en');
fwrite($fichero, ' un fichero');
fwrite($fichero, ' gracias a Programación Básica\n');

fclose($fichero);

$fichero = fopen('fichero.txt', 'a');

fwrite($fichero, 'Estamos en una segunda línea' . PHP_EOL);
fwrite($fichero, 'Y ahora en una tercera línea');

fclose($fichero);

$fichero = fopen('fichero.txt', 'c');

fwrite($fichero, 'TÍTULO' . PHP_EOL . PHP_EOL);

fclose($fichero);
?>

Tenemos un ejemplo parecido al anterior. En esta ocasión, hemos abierto el fichero para escritura creándolo desde cero (con el modo de apertura w). Posteriormente hemos escrito una primera línea y hemos cerrado el fichero.

Imaginemos que ésto no es un flujo continuo y que lo siguiente lo hemos hecho en otro momento, pues el código no tendría mucho sentido si no. Ahora hemos vuelto a abrir el mismo fichero con el modo a porque queremos añadir un par de líneas al final, así que lo abrimos, escribimos y lo volvemos a cerrar. Por último, se nos ha olvidado el título, así que lo volvemos a abrir pero ahora en modo c, pues queremos colocarnos al principio, donde escribiremos un título y dos saltos de línea. El fichero final queda así:

TÍTULO

Probando cómo escribir en un fichero gracias a Programación Básica
Estamos en una segunda línea
Y ahora en una tercera línea

Nota
La función fputs es un alias de fwrite, es decir, se puede usar indistintamente una o la otra, aunque lo más común es ver fwrite.

file_put_contents para escribir directamente

En el anterior artículo vimos file_get_contents si queríamos ahorrarnos el proceso de apertura de un fichero para luego leer todo su contenido. Con file_get_contents ya hacíamos todos esos pasos en uno solo y conseguíamos todo el texto contenido dentro de un fichero.

Ahora tenemos file_put_contents que, como podemos deducir, hará algo parecido pero en cuanto a la escritura. Esta función espera el nombre de un fichero y los datos que tenemos que escribir en él, y ella misma se encarga de abrir, escribir y cerrar. Además, se le puede indicar un tercer parámetro con algunas opciones especiales, pero la que más nos va a importar ahora es FILE_APPEND para añadir información. Veamos un ejemplo:

<?php
file_put_contents('fichero.txt', 'Texto a escribir');
file_put_contents('fichero.txt', '\nSe nos olvidó esta parte', FILE_APPEND);
?>

Como podemos ver, no tiene mucha complicación. En la primera línea le indicamos el nombre de fichero a abrir y el texto que debe escribir. Él mismo ya se encarga de la apertura, que por defecto será la de un nuevo archivo o la de borrar todo lo que haya en fichero.txt en este caso. Si quisiéramos añadir texto al final, tendríamos que indicarle, como se muestra en la segunda línea, FILE_APPEND, consiguiendo así que añada el contenido y no borre lo que ya había.

Movernos por un fichero

¿Podemos movernos por el fichero para escribir donde nos plaza? Sí, por supuesto. Para ello sólo basta con releer el anterior artículo en el cual comentamos métodos para movernos por el fichero. Sin embargo, debemos tener en cuenta que, dentro de la programación, nos va a ser muy complejo “saber” en qué lugar del fichero estamos concretamente. No es lo mismo escribir en un fichero hola que escribir adiós, pues al tener más caracteres, deberemos saber cuánto tenemos que movernos en cada momento. Es por ello que la escritura “al vuelo” del fichero no se suele hacer por su facilidad cometiendo errores, y lo normal es añadir contenido al final, al principio o eliminarlo todo y volverlo a crear.

Resumen

La escritura de ficheros no requiere de situaciones complejas. Conocer el modo de apertura adecuado, saber dónde estamos y empezar a escribir texto sin problemas teniendo en cuenta, sobre todo, cómo indicar saltos de línea. Tan sencillo como eso.

En el próximo artículo finalizaremos viendo algunas funciones útiles para el uso de ficheros (aunque hemos visto ya las principales) y terminaremos con otro artículo de A practicar… para utilizar estos nuevos conocimientos.

Deja una respuesta