Cuando trabajas con PHP y sobre todo con bases de datos (BBDD) se te puede presentar la situación de que un cliente te pida que le migres una serie de datos a una BBDD pero que estos se encuentren en un archivo CSV (del inglés comma-separated values) y por tanto deberemos leer el archivo linea a linea y columna por columna.
Como en la mayoria de casos en los que tienes que hacer algo en PHP podrás encontrar cientos de librerias que te ayuden con este cometido pero en nuestro caso vamos a utilizar una función nativa que lleva implementada desde la versión 4 de este lenguaje de programación. Dicha función es fgetcsv , algo similar al clásico fgets pero destinado a leer el archivo que deseamos analizar así que vamos al lío.
Leer un archivo CSV con PHP
En nuestro caso el archivo csv se llama clientes.csv y los campos que tiene el mismo son:
- Nombre y apellidos
- Teléfono
El código que usaremos será el siguiente:
<?php $linea = 0; //Abrimos nuestro archivo $archivo = fopen("clientes.csv", "r"); //Lo recorremos while (($datos = fgetcsv($archivo, ",")) == true) { $num = count($datos); //Recorremos las columnas de esa linea for ($columna = 0; $columna < $num; $columna++) { echo $datos[$columna] . "\n"; } } //Cerramos el archivo fclose($archivo); ?>
Debéis fijaros en que en la linea que usamos la función en si (fgetcsv), primero indicamos el archivo que hemos abierto previamente con fopen y después indicamos el delimitador de nuestro archivo.
Si los datos que extraemos en nuestra base de datos los quisiéramos insertar en la BBDD podríamos recogerlos en el for y hacer una query a nuestra base de datos.
Cualquier duda que os pueda surgir, dejar un comentario.
Amigo, muchas gracias. He probado tu ejemplo y funciona muy bien. Trabajaré sobre él para hacer mis importaciones. Muy agradecido
Hola, muchas gracias muy útil. Pero tengo una pregunta ¿Cómo hago un sistema de login extrayendo los datos desde un archivo csv , sin importarlo a una base de datos sino directamente?.
Tendrías que hacer un recorrido del CSV y buscar las coincidencias. Yo optaría sin duda por usar un sistema de base de datos para dicho cometido.
Un saludo!
Hola JUAN,
Me muestra Syntax Error en la línea del for
Buenas Juanma, se había desconfigurado el plugin del resaltado de código y estaba mostrando < en vez de < que es con lo que debe funcionarte.
GRACIAS, ya funciona correctamente.