php download array - Crear un archivo CSV para un usuario en PHP




10 Answers

Tratar:

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");

echo "record1,record2,record3\n";
die;

etc

Edición: aquí hay un fragmento de código que utilizo para codificar opcionalmente campos CSV:

function maybeEncodeCSVField($string) {
    if(strpos($string, ',') !== false || strpos($string, '"') !== false || strpos($string, "\n") !== false) {
        $string = '"' . str_replace('"', '""', $string) . '"';
    }
    return $string;
}
to create

Tengo datos en una base de datos MySQL. Estoy enviando al usuario una URL para obtener sus datos como un archivo CSV.

Tengo la dirección de correo del enlace, consulta MySQL, etc. cubierto.

¿Cómo puedo, al hacer clic en el enlace, tener un pop-up para descargar un CVS con el registro de MySQL?

Tengo toda la información para obtener el registro ya. Simplemente no ver cómo tener PHP crear el archivo CSV y dejar que descarga un archivo con la extensión .csv.




Aquí hay una versión mejorada de la función de php.net que @Andrew publicó.

function download_csv_results($results, $name = NULL)
{
    if( ! $name)
    {
        $name = md5(uniqid() . microtime(TRUE) . mt_rand()). '.csv';
    }

    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename='. $name);
    header('Pragma: no-cache');
    header("Expires: 0");

    $outstream = fopen("php://output", "wb");

    foreach($results as $result)
    {
        fputcsv($outstream, $result);
    }

    fclose($outstream);
}

Es realmente fácil de usar y funciona muy bien con los conjuntos de resultados MySQL (i) / PDO.

download_csv_results($results, 'your_name_here.csv');

Recuerde exit() después de llamar a esto si ha terminado con la página.




El hilo es un poco viejo, lo sé, pero para futuras referencias y para noobs como yo:

Todos los demás aquí explican cómo crear el CSV, pero se pierden una parte básica de la pregunta: cómo vincular. Para enlazar a la descarga del archivo CSV, solo se vincula al archivo .php, que a su vez responde como un archivo .csv. Los encabezados de PHP hacen eso. Esto permite cosas interesantes, como agregar variables a la cadena de consulta y personalizar la salida:

<a href="my_csv_creator.php?user=23&amp;othervariable=true">Get CSV</a>

my_csv_creator.php puede trabajar con las variables dadas en la cadena de consulta y, por ejemplo, usar consultas de bases de datos diferentes o personalizadas, cambiar las columnas del CSV, personalizar el nombre de archivo, etc., por ejemplo:

User_John_Doe_10_Dec_11.csv



Aquí hay un ejemplo completo de trabajo que usa DOP e incluye encabezados de columna:

$query = $pdo->prepare('SELECT * FROM test WHERE id=?');
$query->execute(array($id));    
$results = $query->fetchAll(PDO::FETCH_ASSOC);
download_csv_results($results, 'test.csv'); 
exit();


function download_csv_results($results, $name)
{            
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename='. $name);
    header('Pragma: no-cache');
    header("Expires: 0");

    $outstream = fopen("php://output", "wb");    
    fputcsv($outstream, array_keys($results[0]));

    foreach($results as $result)
    {
        fputcsv($outstream, $result);
    }

    fclose($outstream);
}



Hey funciona muy bien .... !!!! Gracias Peter Mortensen y Connor Burton

<?php
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");

ini_set('display_errors',1);
$private=1;
error_reporting(E_ALL ^ E_NOTICE);

mysql_connect("localhost", "user", "pass") or die(mysql_error());
mysql_select_db("db") or die(mysql_error());

$start = $_GET["start"];
$end = $_GET["end"];

$query = "SELECT * FROM customers WHERE created>='{$start} 00:00:00'  AND created<='{$end} 23:59:59'   ORDER BY id";
$select_c = mysql_query($query) or die(mysql_error());

while ($row = mysql_fetch_array($select_c, MYSQL_ASSOC))
{
    $result.="{$row['email']},";
    $result.="\n";
    echo $result;
}

?>




Simplemente puede escribir sus datos en CSV usando la función fputcsv . Veamos el siguiente ejemplo. Escribir la matriz de la lista en el archivo CSV

$list[] = array("Cars", "Planes", "Ships");
$list[] = array("Car's2", "Planes2", "Ships2");
//define headers for CSV 
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=file_name.csv');
//write data into CSV
$fp = fopen('php://output', 'wb');
//convert data to UTF-8 
fprintf($fp, chr(0xEF).chr(0xBB).chr(0xBF));
foreach ($list as $line) {
    fputcsv($fp, $line);
}
fclose($fp);



En lugar de:

$query = "SELECT * FROM customers WHERE created>='{$start} 00:00:00'  AND created<='{$end} 23:59:59'   ORDER BY id";
$select_c = mysql_query($query) or die(mysql_error()); 

while ($row = mysql_fetch_array($select_c, MYSQL_ASSOC))
{
    $result.="{$row['email']},";
    $result.="\n";
    echo $result;
}

Utilizar:

$query = "SELECT * FROM customers WHERE created>='{$start} 00:00:00'  AND created<='{$end} 23:59:59'   ORDER BY id";
$select_c = mysql_query($query) or die(mysql_error()); 

while ($row = mysql_fetch_array($select_c, MYSQL_ASSOC))
{
    echo implode(",", $row)."\n";
}



Para que lo envíe como un CSV y le dé el nombre del archivo, use header ():

http://us2.php.net/header

header('Content-type: text/csv');
header('Content-disposition: attachment; filename="myfile.csv"');

En lo que respecta a la creación del propio CSV, solo debe recorrer el conjunto de resultados, formatear la salida y enviarla, como lo haría con cualquier otro contenido.




Escribir su propio código CSV es probablemente una pérdida de tiempo, solo use un paquete como league / csv - se ocupa de todas las cosas difíciles para usted, la documentación es buena y es muy estable / confiable:

http://csv.thephpleague.com/

Tendrás que estar usando el compositor. Si no sabes qué es el compositor, te recomiendo que veas: https://getcomposer.org/




¿Cómo escribir en un archivo CSV usando un script PHP? En realidad yo también estaba buscando eso también. Es una tarea fácil con PHP. fputs (controlador, contenido) - esta función funciona de manera eficiente para mí. Primero debe abrir el archivo en el que necesita escribir contenido usando fopen ($ CSVFileName, 'wb').

$CSVFileName = “test.csv”;
$fp = fopen($CSVFileName, ‘wb’);

//Multiple iterations to append the data using function fputs()
foreach ($csv_post as $temp)
{
    $line = “”;
    $line .= “Content 1″ . $comma . “$temp” . $comma . “Content 2″ . $comma . “16/10/2012″.$comma;
    $line .= “\n”;
    fputs($fp, $line);
}



Related