Me gustaría salida de mis datos en un archivo para que el usuario descargue sin crear realmente el archivo físicamente en el servidor. Los datos del archivo es simplemente la matriz de la que me estoy convirtiendo en un formato CSV para que el usuario descargue. Aquí está mi código:

$fh = fopen('file.csv','w');
fputcsv($fh,$arr); //$arr is my array that contains the data to be parsed into CSV
fclose($out);

El código anterior crea el archivo con éxito… pero yo no quiero tener que crear un archivo. Quiero, simplemente, la corriente de salida.

Cualquier ayuda sería muy apreciada!

InformationsquelleAutor Andrew | 2013-05-16

2 Comentarios

  1. 8

    Puede utilizar

    header("Content-type: text/csv");
    header("Cache-Control: no-store, no-cache");
    header('Content-Disposition: attachment; filename="content.csv"');
    ...
    $file = fopen('php://output','w');
    • Sólo añadir estos encabezados y abierto a php://output en lugar del archivo.
    • Esto funciona perfectamente, gracias
    • Una cosa más: Cuando escribo en el servidor, el archivo CSV se ve bien. Cuando me la salida de descarga, el archivo CSV es básicamente la fuente de la página web. Es la salida de todo en la pantalla supongo y no sólo de la matriz (según mi código anterior). Alguna idea?
    • Sí, usted tendrá que ejecutar a través de una foreach en la matriz, línea por línea con fputcsv(). Déjame saber si esto no tiene sentido y voy a agregar otro ejemplo.
    • Yo sólo da salida a una nueva ventana en la que se descarga el archivo y funciona bien. Gracias por la ayuda!
  2. 2
    header("Content-type: text/csv");
    header("Content-Disposition: attachment; filename=file.csv");
    header("Pragma: no-cache");
    header("Expires: 0");
    
    echo "record1,record2,record3\n";

    etc
    Pequeño function utilizados por mí para la opción de codificar los campos CSV::

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

Dejar respuesta

Please enter your comment!
Please enter your name here