Advertisement
  1. Code
  2. PHP

Cómo agregar datos a un archivo con PHP

Scroll to top
Read Time: 6 min

Spanish (Español) translation by Ana Paulina Figueroa (you can also view the original English article)

Cuando las personas crean sus sitios web, la información generalmente se almacena en una base de datos. Sin embargo, en ocasiones necesitamos almacenar datos en archivos para que sea más fácil para las personas leerlos o modificarlos posteriormente.

PHP viene con muchas funciones para leer y escribir datos en un archivo. También podemos usar algunas de ellas para agregar datos a un archivo. En este tutorial, aprenderás dos maneras diferentes de agregar datos a un archivo con PHP.

Comprensión de la función file_put_contents()

La función file_put_contents() es una de las maneras más sencillas de escribir datos en un archivo con PHP. Acepta cuatro parámetros diferentes que determinan su comportamiento. Estos parámetros son:

  • filename: la ruta a la ubicación del archivo en el que queremos escribir nuestros datos.
  • data: especifica los datos que quieres escribir en el archivo. Por lo general es una cadena, pero también puedes especificar una matriz o un recurso de tipo stream. La función implosionará automáticamente el contenido de una matriz unidimensional con implode() para escribir los datos en un archivo.
  • flags: controla el comportamiento de file_put_contents(). Hay tres banderas diferentes que puedes configurar aquí, ya sea por sí mismas o combinadas con otras banderas. Es posible combinar diferentes banderas usando el operador |.
  • context: útil solamente para proporcionar datos adicionales a PHP cuando lees o accedes a contenido desde un stream.

Uso de file_put_contents() para agregar datos a un archivo con PHP

El comportamiento predeterminado de la función file_put_contents() es sobrescribir el contenido de un archivo dado con cualquier información nueva que proporciones. Esto no es deseable cuando quieres conservar los antiguos datos y agregar información nueva. En tales casos, puedes usar la bandera FILE_APPEND para indicarle a PHP que debe agregar datos al final del contenido que originalmente se encuentra presente en el archivo.

En algunas circunstancias especiales, es posible que estés agregando datos a un archivo desde múltiples scripts al mismo tiempo. En estas situaciones, es aconsejable obtener un bloqueo exclusivo en el archivo usando la bandera LOCK_EX. Esto puede ayudar a prevenir la corrupción de los datos o algún otro comportamiento inesperado. Cuando uses esta bandera, otros scripts esperarán a que el proceso actual termine de escribir en el archivo antes de agregar sus propios datos.

Aquí puedes ver un ejemplo en el que se agrega algo de texto a un archivo existente mediante el uso de file_put_contents().

1
<?php
2
3
// Original File: Canada is a country in North America. .... bi-national land border.

4
5
// File Contents After this Line: Canada is a country in North America. .... bi-national land border.  Canada's capital is Ottawa,

6
file_put_contents('canada.txt', " Canada's capital is Ottawa,",  FILE_APPEND | LOCK_EX);
7
8
// File Contents After this Line: Canada is a country in North America. .... bi-national land border.  Canada's capital is Ottawa, and its three largest metropolitan areas are Toronto, Montreal, and Vancouver.

9
file_put_contents('canada.txt', " and its three largest metropolitan areas are Toronto, Montreal, and Vancouver.",  FILE_APPEND | LOCK_EX);
10
11
?>

En el ejemplo anterior, escribimos algunas cadenas en un archivo llamado canada.txt, que contiene información sobre Canadá. Ambas cadenas se agregaron al final del archivo, una después de la otra.

Ten en cuenta que esta función creará un archivo si aún no existe uno. Sin embargo, no creará un directorio inexistente. Por lo tanto, quizá sea una buena idea comprobar si un archivo existe antes de que comiences a escribir en él.

Uso de fwrite() para escribir datos en un archivo con PHP

El uso de la función file_put_contents() para escribir datos en un archivo con PHP es similar a llamar a fopen(), fwrite() y fclose(), en ese orden. Esto significa que realizar múltiples operaciones de escritura en el mismo archivo puede ser ineficiente, porque estamos constantemente abriendo y cerrando el archivo, una y otra vez.

Una forma de solucionar este problema es llamar tú mismo a estas funciones. Simplemente comienza llamando a fopen() al principio de la operación de escritura. Después de eso, escribe contenido en el archivo tantas veces como desees con la función fwrite(). Al final, simplemente puedes llamar a fclose() para cerrar el manejador del archivo. Ahora analicemos cada uno de estos pasos a detalle.

La función fopen() acepta cuatro parámetros diferentes que puedes usar para decirle a PHP cómo debe abrir un archivo.

  • filename: el nombre del archivo que quieres abrir.
  • mode: el modo para abrir un archivo puede especificarse usando ya sea uno o dos caracteres. Queremos abrir el archivo y luego agregarle algo de texto. Para agregar, establece el modo con el carácter a o a+. Esto colocará el puntero del archivo al final de este último. PHP también intentará crear el archivo si aún no existe. Cuando los archivos se abren con el modo a+, también puedes leer su contenido.
  • use_include_path: indica a PHP que busque archivos dentro de la ruta de inclusión especificada también. El valor predeterminado es false.
  • context: útil solamente para proporcionar datos adicionales a PHP cuando lees o accedes a contenido desde un stream.

Ahora que el archivo está abierto, podemos usar la función fwrite() para agregar información al archivo. fwrite() recibe tres parámetros:

  • resource: este es el manejador de recursos que creamos anteriormente con fopen().
  • string: el texto que quieres agregar a tu archivo.
  • length: es opcional y se usa para establecer la cantidad máxima de bytes que se deben escribir en el archivo.

Puedes cerrar el manejador del archivo usando la función fclose() una vez que hayas terminado todas tus operaciones de escritura.

Este es un ejemplo que te muestra cómo usar fopen(), fwrite() y fclose() para agregar datos a un archivo.

1
<?php
2
3
//open the file

4
$square_file = fopen("squares.txt", "a+");
5
6
//write the squares from 1 to 10

7
for($i = 1; $i <= 10; $i++) {
8
    $square = $i*$i;
9
    $cube = $square*$i;
10
    $line = "Square of $i is: $square.\n";
11
    fwrite($square_file, $line);
12
}
13
14
//read the first line of the file and echo

15
fseek($square_file, 0);
16
echo fgets($square_file);
17
18
//close the file

19
fclose($square_file);
20
21
?>
Contenido de square.txt
1
Square of 1 is: 1.
2
Square of 2 is: 4.
3
Square of 3 is: 9.
4
Square of 4 is: 16.
5
Square of 5 is: 25.
6
Square of 6 is: 36.
7
Square of 7 is: 49.
8
Square of 8 is: 64.
9
Square of 9 is: 81.
10
Square of 10 is: 100.

En este caso, estamos escribiendo el cuadrado de los números del 1 al 10 en un archivo llamado square.txt. Lo abrimos usando la función fopen() en modo a+, lo que significa que también podemos leer el contenido del archivo además de agregar el nuestro. Con cada iteración del bucle for, se agrega a nuestro archivo una nueva línea con el valor actual de $i y su cuadrado.

Hay algunas funciones como fread() y fgets() que puedes usar para leer lo que esté escrito dentro del archivo. Sin embargo, normalmente necesitarás usar fseek() para colocar el puntero del archivo en la posición deseada para leer los datos como esperas. Después del bucle, vamos al inicio del archivo y leemos su primera línea con fgets().

Finalmente cerramos el manejador de nuestro archivo llamando a la función fclose().

Pensamientos finales

En este tutorial aprendimos dos métodos diferentes para agregar datos a un archivo con PHP. El uso de la función file_put_contents() es más conveniente para escribir datos en un archivo. Sin embargo, el uso de fwrite() puede ser más eficiente cuando tienes que realizar múltiples operaciones de escritura en un archivo. Abrir un archivo con fopen() para agregar los datos también te da la opción de leer su contenido si mueves el puntero del archivo a la ubicación deseada.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.