Saltar al contenido

Exportar a CSV a través de PHP

Revisamos de forma exhaustivamente cada uno de los enunciados de nuestra web con el objetivo de mostrarte siempre la información certera y actualizada.

Solución:

Yo personalmente uso esta función para crear contenido CSV desde cualquier array.

function array2csv(array &$array)

   if (count($array) == 0) 
     return null;
   
   ob_start();
   $df = fopen("php://output", 'w');
   fputcsv($df, array_keys(reset($array)));
   foreach ($array as $row) 
      fputcsv($df, $row);
   
   fclose($df);
   return ob_get_clean();

Luego puede hacer que su usuario descargue ese archivo usando algo como:

function download_send_headers($filename) 
    // disable caching
    $now = gmdate("D, d M Y H:i:s");
    header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
    header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
    header("Last-Modified: $now GMT");

    // force download  
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");

    // disposition / encoding on response body
    header("Content-Disposition: attachment;filename=$filename");
    header("Content-Transfer-Encoding: binary");

Ejemplo de uso:

download_send_headers("data_export_" . date("Y-m-d") . ".csv");
echo array2csv($array);
die();

Puede exportar la fecha usando este comando.


Primero debe cargar los datos del servidor mysql en un array

Solo para que conste, la concatenación es muuuuuy más rápida (lo digo en serio) que fputcsv o incluso implode; Y el tamaño del archivo es más pequeño:

// The data from Eternal Oblivion is an object, always
$values = (array) fetchDataFromEternalOblivion($userId, $limit = 1000);

// ----- fputcsv (slow)
// The code of @Alain Tiemblo is the best implementation
ob_start();
$csv = fopen("php://output", 'w');
fputcsv($csv, array_keys(reset($values)));
foreach ($values as $row) 
    fputcsv($csv, $row);

fclose($csv);
return ob_get_clean();

// ----- implode (slow, but file size is smaller)
$csv = implode(",", array_keys(reset($values))) . PHP_EOL;
foreach ($values as $row) 
    $csv .= '"' . implode('","', $row) . '"' . PHP_EOL;

return $csv;
// ----- concatenation (fast, file size is smaller)
// We can use one implode for the headers =D
$csv = implode(",", array_keys(reset($values))) . PHP_EOL;
$i = 1;
// This is less flexible, but we have more control over the formatting
foreach ($values as $row) 
    $csv .= '"' . $row['id'] . '",';
    $csv .= '"' . $row['name'] . '",';
    $csv .= '"' . date('d-m-Y', strtotime($row['date'])) . '",';
    $csv .= '"' . ($row['pet_name'] ?: '-' ) . '",';
    $csv .= PHP_EOL;

return $csv;

Ésta es la conclusión de la optimización de varios informes, de diez a miles de filas. Los tres ejemplos funcionaron bien en 1000 filas, pero fallan cuando los datos eran más grandes.

Agradecemos que desees proteger nuestro cometido mostrando un comentario o puntuándolo te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

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