Question

J'ai besoin d'un moyen de faire les écrire la fonction fputscv données au navigateur sur la volée au lieu de créer un fichier temporaire, l'enregistrement des données dans ce fichier et faire un echo file_get_contents().

Était-ce utile?

La solution

trouvé sur le site docs PHP, premier commentaire sous la référence de fonction:

function outputCSV($data) {
  $outstream = fopen("php://output", 'w');
  function __outputCSV(&$vals, $key, $filehandler) {
    fputcsv($filehandler, $vals, ';', '"');
  }
  array_walk($data, '__outputCSV', $outstream);
  fclose($outstream);
}

Et une seconde option:

$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);

Hope this helps!

BTW la documentation PHP devrait toujours être votre premier arrêt lorsque vous essayez de choses à comprendre. : -)

Autres conseils

par un commentaire sur le site PHP

<?php
$out = fopen('php://output', 'w');
fputcsv($out, array('this','is some', 'csv "stuff", you know.'));
fclose($out);
?>

En tant que demandeur d'origine a voulu « écrire au navigateur à la volée », est peut-être noter la valeur (comme cela a été mon cas et Noone mentionné) que si vous voulez forcer un nom de fichier et une boîte de dialogue demandant de télécharger un fichier dans le navigateur, vous devez définir les en-têtes appropriés avant la sortie quelque chose avec fputcsv:

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=myFile.csv');

La production d'un CSV est en fait pas si difficile (l'analyse d'un CSV est un peu plus impliqué).

Exemple de code pour écrire un tableau 2D comme CSV:

$array = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
];

// If this CSV is a HTTP response you will need to set the right content type
header("Content-Type: text/csv"); 

// If you need to force download or set a filename (you can also do this with 
// the download attribute in HTML5 instead)
header('Content-Disposition: attachment; filename="example.csv"')

// Column heading row, if required.
echo "Column heading 1,Column heading 2,Column heading 3\n"; 

foreach ($array as $row) {
    $row = array_map(function($cell) {
        // Cells containing a quote, a comma or a new line will need to be 
        // contained in double quotes.
        if (preg_match('/["\n,]/', $cell)) {
            // double quotes within cells need to be escaped.
            return '"' . preg_replace('/"/', '""', $cell) . '"';
        }

        return $cell;
    }, $row);

    echo implode(',', $row) . "\n";
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top