php - should - Cómo hacer que fputcsv "echo" los datos
strict standards only variables should be passed by reference (4)
Como el asker original quería "escribir en el navegador sobre la marcha", tal vez valga la pena señalar (como fue mi caso y nadie lo mencionó) que si desea forzar un nombre de archivo y un diálogo solicitando descargar un archivo en el navegador , debe establecer los encabezados adecuados antes de fputcsv
cualquier cosa con fputcsv
:
header(''Content-Type: text/csv; charset=utf-8'');
header(''Content-Disposition: attachment; filename=myFile.csv'');
Necesito una forma de hacer que la función fputscv
escriba datos en el navegador sobre la marcha en lugar de crear un archivo temporal, guardar datos en ese archivo y hacer un echo file_get_contents()
.
Encontré esto en el sitio web de documentos PHP, primero comente bajo la referencia de función:
function outputCSV($data) {
$outstream = fopen("php://output", ''w'');
function __outputCSV(&$vals, $key, $filehandler) {
fputcsv($filehandler, $vals, '';'', ''"'');
}
array_walk($data, ''__outputCSV'', $outstream);
fclose($outstream);
}
Y una segunda opción:
$csv = fopen(''php://temp/maxmemory:''. (5*1024*1024), ''r+'');
fputcsv($csv, array(''blah'',''blah''));
rewind($csv);
// put it all in a variable
$output = stream_get_contents($csv);
¡Espero que esto ayude!
Por cierto, los documentos PHP siempre deben ser su primera parada cuando intente resolver las cosas. :-)
http://www.codehive.net/PHP-Array-to-CSV-1.html le dará una función que se ajusta a los requisitos de no usar el sistema de archivos.
Por un comentario en el sitio PHP
<?php
$out = fopen(''php://output'', ''w'');
fputcsv($out, array(''this'',''is some'', ''csv "stuff", you know.''));
fclose($out);
?>