it-swarm-es.com

Envíe un archivo CSV al usuario en el envío del formulario FAPI

Tengo un formulario FAPI que recopila información del usuario y luego genera un archivo CSV. La intención es que cuando el usuario haga clic en "exportar" en el formulario, el archivo CSV se descargará de inmediato.

Sin embargo, cuando el controlador de envío llama a la función de generación de CSV, el formulario simplemente redirecciona, en lugar de entregar el CSV.

¿Hay alguna forma de hacer que este formulario sirva el CSV al usuario directamente, sin generar un archivo temporal?

4
Chris Cohen

Supongo que el código en esta publicación de blog http://sirkitree.net/node/2 ayudará. Esencialmente, debe usar exit () o die () al final de su controlador de envío para evitar la redirección.

 $ archivo = $ encabezado. "\ n"; 
 foreach ($ cuentas como $ fila) {
 $ archivo. = $ fila. "\ n"; 
} 
 header ('Cache-Control: must-revalidate, post-check = 0, pre-check = 0'); 
 header ('Content-Type: text/csv') ; 
 encabezado ('Content-Disposition: adjunto; filename = "users.csv"'); 
 die (print $ file); 
 
6
Sivaji

La siguiente rutina "enviará" un archivo al usuario, lo que hará que el navegador muestre un cuadro de diálogo de "guardar archivo":

function _cex_download( $output, $filename ) 
{
  header("Pragma: public");
  header("Expires: 0");
  header("Cache-Control: private");
  header("Content-type: application/octet-stream");
  header("Content-Disposition: attachment; filename=$filename");
  header("Accept-Ranges: bytes");
  echo $output;
  exit;
} 

(Donde 'cex' es el nombre de mi módulo personalizado y '_cex' designa una función privada).

Para usar esto, genere su archivo CSV dentro de una cadena, y luego simplemente llámelo, pasando el contenido CSV en $ output y el nombre del archivo que el navegador guardará como en $ filename.

Originalmente obtuve esta lógica de cómo Ubercart maneja las descargas seguras.

2
Blake Senftner