2011-01-14 4 views
25

J'ai besoin d'un moyen de rendre la fonction fputscv écrire des données au navigateur à la volée au lieu de créer un fichier temporaire, en enregistrant les données dans ce fichier et en faisant un echo file_get_contents(). Aidez-moi!!!Comment faire fputcsv "echo" les données

Répondre

37

trouvé sur le site docs PHP, premier commentaire sous la référence de la 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 les documents PHP devraient toujours être votre premier arrêt en essayant de comprendre les choses. :-)

+0

Zut ... comment pourrais-je manquer ça !!! –

+1

le outputCSV() du site PHP ne fonctionne pas, avez-vous même testé cela? –

+4

J'ai répondu à cette question il y a 4+ ans, peut-être que quelque chose a changé? Je ne peux pas honnêtement dire si je l'ai essayé ou non, mais je suppose que je l'aurais fait. N'hésitez pas à développer sur ce qui ne fonctionne pas exactement au lieu de votre réponse vide sans aucun détail, et peut-être que je vais regarder plus loin. –

2

Comme le voulait asker original « écrire sur le navigateur à la volée », est peut-être intéressant de noter (comme cela a été mon cas et Noone mentionné) que si vous voulez forcer un fichier nom 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');