php

Leer archivo CSV con PHP y fgetcsv

En este post voy a explicar cómo podemos leer un archivo o fichero CSV (valores separados por coma) en el lenguaje de programación PHP. Para ello, se utiliza la función fgetcsv, la cual permite leer fila por fila como si se tratara de un arreglo.

Leer archivo CSV con PHP

Veremos los argumentos que recibe esta función, las formas de llamarla y cómo manejar los errores comunes.

Usar fgetcsv para leer archivo CSV con PHP

La función fgetcsv recibe un manejador de archivo, es decir, algo que devuelve una función como fopen. Nosotros nos encargamos de abrir el archivo, y el manejador se lo pasamos a fgetcsv; ya que esa función no se encarga de abrirlo.

Los argumentos para la función son, en orden:

  1. El manejador.
  2. La longitud máxima que puede tener una línea del archivo CSV. Si no la sabemos, la ponemos en 0. Yo recomiendo ponerla en un número muy grande, aunque tampoco tanto; todo depende del archivo.
  3. El delimitador, que por defecto es la coma, pero podría ser otro carácter.
  4. El carácter que encierra a los valores. A veces, aparte de las comas, los valores son encerrados entre comillas, por ejemplo. Por defecto, el carácter circundante es ".
  5. El carácter de escape, el cual es por defecto \.

Así que en resumen, sólo es obligatorio el primer argumento: el manejador; los demás tienen valores por defecto.

Esto de la longitud máxima de la línea es importante, pues si la ponemos en 0 no habrá errores pero la lectura será un poco más lenta.

Sobre los valores devueltos, fgetcsv devuelve un arreglo que representa una línea del archivo. También puede regresar null si el manejador es erróneo, o false cuando termina de leer el archivo (o también si existen otros errores).

Para ello, cada vez que la llamamos, comprobamos si lo que devuelve no es false. Si no, entonces accedemos al arreglo. El arreglo que devuelve es la línea o fila, y cada elemento es una columna.

Ejemplo de lectura de archivo CSV con fgetcsv

Aquí expongo un ejemplo para leer un CSV de productos. Cada campo está separado por comas, y cada fila por un salto de línea.

La primera línea es el encabezado, por eso hago una comparación con el número de fila para saber si es la primera.

<?php
/*
    Ejemplo de lectura de CSV
    desde PHP

    Visita parzibyte.me/blog
*/# La longitud máxima de la línea del CSV. Si no la sabes,
# ponla en 0 pero la lectura será un poco más lenta
$longitudDeLinea = 1000;
$delimitador = ","; # Separador de columnas
$caracterCircundante = '"'; # A veces los valores son encerrados entre comillas
$nombreArchivo = "productos.csv"; #Ruta del archivo, en este caso está junto a este script
# Abrir el archivo
$gestor = fopen($nombreArchivo, "r");
if (!$gestor) {
    exit("No se puede abrir el archivo $nombreArchivo");
}

#  Comenzar a leer, $numeroDeFila es para llevar un índice
$numeroDeFila = 1;
while (($fila = fgetcsv($gestor, $longitudDeLinea, $delimitador, $caracterCircundante)) !== false) {

    if ($numeroDeFila === 1) {
        echo "Los encabezados son: ";
    }
    # Ahora $fila es un arreglo. Podríamos acceder al precio de compra en $fila[1]
    # porque los índices de los arreglos comienzan en 0
    foreach ($fila as $numeroDeColumna => $columna) {
        echo "En la columna $numeroDeColumna tenemos a $columna\n";
    }
    # Para separar la impresión
    echo "\n\n";
    # Aumentar el índice
    $numeroDeFila++;
}
# Al finar cerrar el gestor
fclose($gestor);
Nombre,Precio de compra,Precio de venta,Cantidad
Mouse Logitech,400,500,10
Xiaomi Mi A1,500,600,15
Auriculares Sony,50,500,10
Galletas de chocolate,10,12,500

Aunque GitHub muestra los archivos CSV como tablas, puedes abrirlo y hacer click en view raw para ver cómo es en realidad.

Como se observa, primero se intenta abrir el archivo con fopen. En caso de que no se pueda, se sale del script inmediatamente. En caso de que sí se pueda abrir, le pasamos el manejador a fgetcsv y en un ciclo while leemos todo el contenido.

Probar ejemplos

Eres libre de copiar el código y probarlo por ti mismo. Para ello, primero asegúrate de tener instalado Apache y PHP. Después, puedes ejecutar los ejemplos desde la terminal o visitando htdocs.

Referencias

Me he basado en este link de la documentación oficial.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.