Cómo crear y leer CSV con PHP

Tutorial práctico sobre cómo trabajar ficheros CSV con PHP.

Ficheros en php

En este tutorial voy a explicar de forma clara, práctica y con funciones como crear ficheros CSV en PHP.

Esta tarea realmente es sencilla gracias a que PHP tiene funciones dirigidas para este propósito.

En este breve artículo de programación encontrarás:

  • Funciones PHP nativas para la escritura y lectura de ficheros CSV.
  • Cómo leer un fichero de formato CSV paso a paso.
  • Cómo escribir un fichero CSV.
  • Función para copiar y pegar que pasa de CSV a ARRAY.
  • Función PHP para copiar y pegar que pasa ARRAY a CSV.

 

Funciones PHP para leer y escribir CSVs

Para leer y escribir un CSV en PHP necesitamos utilizar 2 funciones PHP diseñadas especialmente para este fin. La función fgetcsv y la función función fputcsv.

La función fputcsv es capaz de convertir un array en una línea de un csv mientras que la función fgetcsv es capaz de realizar el proceso contrario, es decir, pasar una línea de un fichero a un array con los distintos valores de sus columnas.

Las funciones fputcsv y fgetcsv están configuradas por defecto para que el separador de las columnas sea una coma, y las comillas el "enclosure" o lo que es lo mismo, el caracter que se utiliza para contener a los textos de las columnas que contienen el caracter separador.

Si la configuración por defecto de estas funciones no se adapta a tu fichero leído puedes configurarlas mediante el parámetro 3 y 4 de la función.

Por ejemplo, para leer un fichero que esté separado por el caracter punto y coma y el caracter para los textos sea comilla simple, podría configurar la función de la siguiente manera:

fgetcsv( $fichero,  0,  ";", "'");
//para insertar en el fichero sería
fputcsdv( $fichero, $arrayLinea, ";",  "'");

Cómo leer un fichero CSV

Como te he mencionado en el punto anterior, para leer un fichero de extensión CSV de forma efectiva en PHP necesitamos principalmente una funcion: fgetcsv. Pero no solo con esta función seremos capaces de leer un fichero completo CSV. 

Para leer un fichero CSV también usaremos las funciones comunes de manipulación de ficheros: fopen, feof y fclose. El proceso completo para la lectura de un fichero CSV es el siguiente:

  1. Abrir el fichero de extensión CSV que queremos leer.
  2. Recorrer el fichero mediante un bucle  y la función para saber si el fichero se ha terminado feof.
  3. Extraer cada una de las líneas del fichero mediante fgetcsv
  4. Cerrar el fichero en cuestión con fclose.

Con este esquema crearos una función o código PHP que lea el fichero y lo acabe pasando a un array para facilitar posteriormente su lectura. Al menos esta es la forma en la que yo suelo preferir recorrerlos, también podrías simplemente imprimir su contenido por pantalla, o trabajar los datos extraidos de alguna forma concreta.

El siguiente código realizaría la lectura que te acabo de explicar y almacenaría el contenido en la variable $data.

$file = fopen( 'ruta-fichero/fichero.csv', "r");
 $data = array();

while (!feof($file)) {
        $data[] = fgetcsv($file,null,';');
}
fclose($file);

Cómo escribir/crear un CSV

Para escribir o crear un CSV con PHP seguiremos un procedimiento similar al de lectura pero a la inversa; en vez de obtener datos del fichero los insertaremos desde el array.

Para escribir en un CSV yo siempre sigo el mismo procedmiento, aunque puedes realizar otro dependiendo del problema que quieres resolver.

Yo siempre comienzo a preparar la información del CSV mediante la utilización de una matriz (array de arrays) de esta forma, recorriendo cada una de las filas de la matriz tengo la estructura perfecta para insertar filas en el CSV, justamente es lo que realiza la función fputcsv de PHP.

Pasos a seguir:

  1. Abrir el fichero con su ruta con la función php fopen.
  2. Recorrer el array o contenido a insertar con un bucle. Para arrays yo siempre uso foreach.
  3. Insertar una línea en el CSV con un Array y la función fputcsv( array )
  4. Cerrar el fichero abierto con fclose.

En el siguiente script puedes ver como escribo en el CSV utilizando una matriz $matriz_productos como base para las filas y las columnas. Has de tener en cuenta que por defecto el CSV leído debe usar el caracter "," (coma) como separador de las columnas y las dobles comillas como contenedor de los textos.

 

$outputBuffer = fopen($ruta_csv, 'w');
foreach($matriz_productos as $n_linea => $linea) {
	fputcsv($outputBuffer, $linea);		
}
fclose($outputBuffer);

Función que pasa CSV a Array

function process_csv($file) {

    $file = fopen($file, "r");
    $data = array();

    while (!feof($file)) {
        $data[] = fgetcsv($file,null,';');
    }

    fclose($file);
    return $data;
}

Función que pasa Array a CSV

function write_csv($matriz_productos, $ruta_csv) {
	if( !file_exists( $ruta_csv ) ); 
		file_put_contents( $ruta_csv, '');
	$outputBuffer = fopen($ruta_csv, 'w');
	foreach($matriz_productos as $n_linea => $linea) {
		fputcsv($outputBuffer, $linea, ';', '"');
	}
	fclose($outputBuffer);
}

Sobre el autor

Javier Gómez Redactor en Srcodigofuente.es

Javier Gómez

Ingeniero técnico en informática de gestión. Desarrollador web freelance y profesor de desarrollo web a partes iguales. Testarudo autodidacta, creativo, perfeccionista y alma libre.

Cargando comentarios

Utilizamos "cookies" para información estadística. Si continúas navegando aceptas su uso.