Digamos que tengo una base de datos ... ¿hay alguna manera de exportar lo que tengo de la base de datos a un archivo CSV (y archivo de texto [si es posible]) a través de PHP?Exportar a CSV a través de PHP
Respuesta
Personalmente uso esta función para crear contenido CSV desde cualquier matriz.
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();
}
A continuación, puede hacer que su usuario descargar ese archivo usando algo como: ejemplo
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");
}
Uso:
download_send_headers("data_export_" . date("Y-m-d") . ".csv");
echo array2csv($array);
die();
en el servidor local funciona, pero en el distante muestra una nueva página con contenido y sin ventana de descarga (perdón por mi inglés) –
Puede haber varios motivos para los errores, la forma más sencilla de encontrarlos es ver el error de apache .archivo de registro. –
Estoy intentando usar este ejemplo y lo que obtengo en el archivo CSV es mi fuente HTML de página completa en lugar de los resultados de la función array2csv()? –
Puede exportar la fecha usando este comando.
<?php
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$fp = fopen('file.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>
En primer lugar debe cargar los datos desde el servidor MySQL en una matriz de
O bien, puede hacer el fputcsv() dentro de un lazo assoc de búsqueda estándar y desplegarlo directamente desde los resultados devueltos. – DampeS8N
@ DampeS8N, +1 para el uso de "plop down straight out" en una oración. – AnchovyLegend
recomiendo parsecsv-for-php de moverse por varios problemas con saltos de línea anidados y citas.
Al igual que @ Dampes8N dijo:
$result = mysql_query($sql,$conecction);
$fp = fopen('file.csv', 'w');
while($row = mysql_fetch_assoc($result)){
fputcsv($fp, $row);
}
fclose($fp);
Espero que esto ayude.
"fp = fopen ('archivo.csv', 'w'); " debería comenzar con $ fp, pero no se permiten 1 edición de carbonilla. – jay
código prefabricado adjunto aquí. se puede usar con sólo copiar y pegar en el código:
https://gist.github.com/umairidrees/8952054#file-php-save-db-table-as-csv
Sólo para que conste, la concatenación es waaaaaay más rápido (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;
Esta es la conclusión de la optimización de varios informes, de diez a miles filas. Los tres ejemplos funcionaron bien bajo 1000 filas, pero falla cuando los datos eran más grandes.
trabaja con más de 100 líneas, si se especifica el tamaño del archivo en las cabeceras simple llamada al método get() en su propia clase
function setHeader($filename, $filesize)
{
// disable caching
$now = gmdate("D, d M Y H:i:s");
header("Expires: Tue, 01 Jan 2001 00:00:01 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");
header('Content-Type: text/x-csv');
// disposition/encoding on response body
if (isset($filename) && strlen($filename) > 0)
header("Content-Disposition: attachment;filename={$filename}");
if (isset($filesize))
header("Content-Length: ".$filesize);
header("Content-Transfer-Encoding: binary");
header("Connection: close");
}
function getSql()
{
// return you own sql
$sql = "SELECT id, date, params, value FROM sometable ORDER BY date;";
return $sql;
}
function getExportData()
{
$values = array();
$sql = $this->getSql();
if (strlen($sql) > 0)
{
$result = dbquery($sql); // opens the database and executes the sql ... make your own ;-)
$fromDb = mysql_fetch_assoc($result);
if ($fromDb !== false)
{
while ($fromDb)
{
$values[] = $fromDb;
$fromDb = mysql_fetch_assoc($result);
}
}
}
return $values;
}
function get()
{
$values = $this->getExportData(); // values as array
$csv = tmpfile();
$bFirstRowHeader = true;
foreach ($values as $row)
{
if ($bFirstRowHeader)
{
fputcsv($csv, array_keys($row));
$bFirstRowHeader = false;
}
fputcsv($csv, array_values($row));
}
rewind($csv);
$filename = "export_".date("Y-m-d").".csv";
$fstat = fstat($csv);
$this->setHeader($filename, $fstat['size']);
fpassthru($csv);
fclose($csv);
}
- 1. Opción Redis-cli --csv (exportar a csv)
- 2. Exportar HIVE a un CSV
- 3. Exportar a csv - consulta Linq
- 4. exportar el resultado de la consulta como CSV a través de PHP
- 5. Exportar datos de qtablewidget a csv
- 6. Exportación de datos MYSQL a Excel/CSV a través de php
- 7. Silverlight DataGrid: exportar a excel o csv
- 8. Exportar datos a CSV en rieles
- 9. Exportar de PHP a Excel
- 10. php + jqgrid + exportar a excel
- 11. Biblioteca PHP para convertir JSON a CSV?
- 12. CSV a JSON con PHP?
- 13. Exportar BOM UTF-8 a .csv en R
- 14. Cómo exportar la consulta de SQL Server 2005 a CSV
- 15. Oracle cómo exportar consulta a un archivo de texto/csv
- 16. Exportar/Importar CSV con PHPExcel
- 17. Exportar cada hoja a un archivo csv diferente
- 18. Exportar a CSV con personalizar el color de fuente usando PHP
- 19. Exportar tabla desde Amazon RDS a un archivo csv
- 20. Cómo puedo exportar artículos a archivos csv por artículo
- 21. Cómo exportar la entidad Core Data a un archivo CSV
- 22. ¿Es posible exportar la tabla sqlite3 a csv o similar?
- 23. Django admin - Exportar como CSV
- 24. exportar a formato epub en php
- 25. Ejecutar SQL en archivos CSV a través de JDBC
- 26. Exportar contactos de GMail a través de una secuencia de comandos desatendida
- 27. en el archivo de Excel a través de PHP
- 28. Uso de R a través de PHP
- 29. Exportación del registro de Subversion a CSV
- 30. Descargar archivo a través de una llamada ajax php
http://code.stephenmorley.org/php/creating-downloadable-csv-files/ –