Importando y exportando archivos csv con PHP

Los ficheros CSV (abreviatura de comma-separated values) son de gran utilidad, dado que nos permiten importar y exportar datos fácilmente en un formato libre que puede ser abierto por casi cualquier hoja de cálculo.

Para el ejemplo de generación de CSV vamos a suponer que habéis lanzado una consulta contra una base de datos SQL y ya tenéis los datos recuperados en el array pertinente (en este caso le llamaré $datos en el ejemplo), pero además de imprimirlos en pantalla tenéis que exportarlos a un formato con el que pueda trabajar, por ejemplo, Excel (cuando estaba en Nática tuve que hacer algo similar pero con ASP). Bueno, pues la cosa iría como en el siguiente ejemplo:

$file = fopen("exportacion.csv","w"); //abrimos el archivo csv para escritura
$s = ","; //establecemos un separador

while($registro = mysql_fetch_array($datos) ) {
	$fila = $registro['id'].$s.$regisro['nombre'].$s.$registro['telefono']."\n";
	fwrite($file,$fila);
}
fclose($file);

Bueno, la cosa es simple. Primero abrimos el archivo (en este caso le llamé exportacion.csv) en modo de escritura. Establecemos una variable con un valor como separador (en este caso, la coma) y recorremos el array con un bucle while, creando una variable $fila con todos los datos que guardamos en cada iteración del bucle. Con todo esto ya tenemos generado nuesto .csv

Pero ¿y el caso contrario? ¿Y si lo que queremos es abrir un fichero csv desde nuestro php para imprimirlo en pantalla o para guardarlo en la base de datos? Bueno, en el siguiente ejemplo veremos como leer el archivo:

$file = fopen ( "exportacion.csv" , "r" );
while (( $data = fgetcsv ($file,1000,",")) !== FALSE ){
    $i = 0;
    foreach($data as $row) {
        echo "registro $i: $row<br/>";
        // Imprime toda la fila
        $i++ ;
    }
    echo "<br/><br/>";
}
fclose ( $file );

 

Bueno, la explicación es rápida también. Primero abrimos el archivo de antes en modo lectura. Tras esto, usando la función fgetcsv recuperamos la información del archivo y con el bucle foreach recorremos todas las filas, en este caso imprimiéndolas. Podríamos, por ejemplo, usar la función split para partir la fila por las comas y acceder así a los valores por separado de cada una

En fin, espero que esto os sirva como ayuda e introducción para trabajar con estos archivos en php

Anuncios

4 comentarios en “Importando y exportando archivos csv con PHP

  1. Kerly

    Hola muy bueno los script, me gusta el segundo ejemplo ya que se de adapta mucho a lo que necesito. Me podrías asesorar en lo siguiente, yo necesito actualizar una tabla en base de datos postgresql a través de una interfaz de usuario. Es decir, que el usuario que usa el sistema actualice esa tabla con los datos que se encuentran en un archivo csv; quiero que lo haga por medio de un campo input file. No tengo la mas mínima idea de como comenzar.
    Espero me puedas ayudar

    1. Si no te he entendido mal quieres que el usuario suba un archivo .csv para actualizar la base de datos.

      Bueno, lo primero es crear un formulario y añadir en los atributos del mismo enctype=”multipart/form-data” para que te permita manipular el archivo en php. Después usa el segundo script tal cual, pero el el fopen() cambia la url del archivo por la variable de servidor $_FILE[‘nombre_que_dieras_al_campo_input’].

      Con esto deberías tener el problema resuelto. En todo caso en la web oficial de PHP tienes manuales en castellano por si tienes alguna duda sobre cómo se trabaja con archivos en PHP.

  2. A mi también me va a venir muy bien esto. Estaba buscando información sobre otra cosa y no sabía en donde preguntarla. Espero que no te sea muy impertinente esta pregunta:

    ¿Cómo puedo hacer para sustituir las xxxx por un elemento que represente cualquier número que no sea el 2146919244?

    $crawler->addURLFollowRule(“#DESC-vs-“.”2146919244$#”);
    $crawler->addURLFilterRule(“#DESC-vs-“.”xxxx$#”);

    Si estas de movida puedo esperar a mañana 😀 Un saludo!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s