Crear archivo CSV para exportar datos en PHP

00¡Hola a todos!

A veces, para poder transferir datos entre equipos, se requieren de «alternativas» que permitan hacerlo de manera fácil, rápida posible u oportuna posible; es por ésta razón que les traigo éste código PHP para poder, en base a unos datos dentro de una tabla de una base de datos, generar un archivo CSV que podamos manejarlo como queramos. Los archivos csv son un tipo de documento en formato abierto y sencillo para representar datos en forma de tabla.

Las excusas para hacer esto, la verdad que sobran… por eso sé que a más de alguno le puede servir (así como me sirvió a mí en su momento).

Ok, explicaré un poco el código según los bloques de colores (no encontré otra forma para hacerlo xD ).

  • El bloque azul, es básicamente la conexión a la base de datos, que para nuestro ejemplo se trata de una base de datos en Microsoft SQL Server. Tomar en cuenta que la versión de PHP con la que se realizó ésta entrada es la 5.6 ; Las versiones más actuales de PHP (Como la 7 por ejemplo) ya no soportan éstas funciones utilizadas. También, se hace la consulta a la BD para traer los registros de la tabla.
  • El bloque verde, hace el barrido de lo traído de la tabla para guardarlo en la variable $Datos. Básicamente éste sería el contenido del archivo CSV. Para éste ejemplo, los campos son separados por comas (,), los registros se separan por saltos de línea (\r\n) y cada campo va encerrado entre » «.
  • El bloque rojo es el importante… Aquí creamos el archivo usuarios.csv para escribir en él (si no se puede crear se muestra un mensaje), y luego se inserta la información que esta dentro de $Datos (si no se puede insertar la data, se muestra un mensaje).

A continuación, el código:

<?php
    $link = mssql_connect("localhost","root","clave");
    mssql_select_db("base_datos",$link);
    $sql = "select usuario,clave,nombre from usuarios order by usuario";
    $reg = mssql_query($sql,$link);
    $nreg = mssql_num_rows($reg);

    for($i=0; $i < $nreg; $i++){
        $Datos .= '"'.mssql_result($reg,$i,"usuario").'","'.mssql_result($reg,$i,"clave").'","'.mssql_result($reg,$i,"nombre").'"';
        $Datos .= "\r\n"; 
    }
    mssql_close($link); 

    if (!$handle = fopen("usuarios.csv", "w")) {  
        echo "El archivo no se puede crear";
        exit;  
    }
    if (fwrite($handle, utf8_decode($Datos)) === false){
        echo "El archivo no se puede escribir";
        exit;
    }
    fclose($handle);
?>

El archivo usuario.csv se debería de crear en la misma carpeta donde esta ubicado nuestro archivo .php , y es necesario contar con el permiso respecto para poder crear dicho archivo e inyectarle la data (con un chmod -R 775 a la carpeta creería que sería suficiente).

Recomiendo que esto se ponga en alguna carpeta que No esté publicada… o sea, fuera de /var/www… ¿Porqué? para no exponer la data al público. Se puede hacer invocando el ejecutable php y redireccionar la salida al vacío (literalmente xD ); así:

/usr/bin/php /home/usuario/data/genera-csv.php  >/dev/null

Bien, eso es todo. ¡Saludos!

Comentarios por Facebook

comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*