2012-06-06 5 views
7

Je voudrais générer un fichier csv avec des données, que je reçois en interrogeant une base de données. Le navigateur devrait alors inviter l'utilisateur à télécharger le fichier. Par problème, c'est que la fonction readfile a besoin d'un nom de fichier et non d'un handle, mais je ne trouve pas de fonction pour obtenir le nom de fichier de ce fichier temporaire. Je suppose qu'il y a de meilleures façons de le faire, mais je ne peux pas les trouver.Comment exporter un fichier csv temporaire généré dynamiquement?

$handle = tmpfile(); 
fputcsv($handle, array('year', 'month', 'product', 'count')); 
header('Content-Type: application/csv'); 
header('Content-Disposition:attachment;filename=LS_export'); 
echo readfile($handle); 
fclose($handle); 
exit(); 
+0

vous utilisez MySQL? –

+0

oui @khaled_webdev – Riesling

+0

vous pouvez genereate le fichier directement à partir d'une requête mysql –

Répondre

13

Vous recherchez rewind pour réinitialiser le pointeur de fichier au début du fichier, suivi par fpassthru à la sortie tout le contenu du fichier.

rewind($handle); 
fpassthru($handle); 

Une autre solution consiste à utiliser tempnam pour générer un fichier unique qui est pas supprimé quand il est fermé. Ne pas oublier de l'enlever manuellement quand vous avez fini avec elle.

$name = tempnam('/tmp', 'csv'); 
$handle = fopen($name, 'w'); 
... 
fclose($handle); 
readfile($name); 
unlink($name); 
+0

c'est ce que je cherchais, fonctionne comme un charme, merci – Riesling

2

Utilisez

$tmpfname = tempnam("/", ""); 
$handle = fopen($tmpfname, "w"); 
... 
fclose($handle); 

Et vous avez le nom de fichier trop.

+0

N'oubliez pas de supprimer le fichier après. Mais la solution d'Emil semble meilleure. – Zoka

0

de MySQL

SELECT id, name, email INTO OUTFILE '/tmp/result.csv' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY ‘\\’ 
LINES TERMINATED BY '\n' 
FROM users WHERE 1 

et supprimer la demande

séparateurs de redéfinissent et d'autres param que vous avez besoin

Questions connexes