Je veux créer un fichier csv, mais lorsque je lance le code, il renvoie une page vierge et aucun fichier csv. J'utilise PHP 5. J'utilise le code suivant:
<?php
$data = array ('aaa,bbb,ccc,dddd',
'123,456,789',
'"aaa","bbb"');
$fp = fopen('data.csv', 'w');
foreach($data as $line){
$val = explode(",",$line);
fputcsv($fp, $val);
}
fclose($fp);
?>
Je vous remercie!
C'est vide parce que vous écrivez à file
. vous devriez écrire à output
en utilisant php://output
à la place et envoyez également des informations d'en-tête pour indiquer qu'il s'agit de csv.
Exemple
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="sample.csv"');
$data = array(
'aaa,bbb,ccc,dddd',
'123,456,789',
'"aaa","bbb"'
);
$fp = fopen('php://output', 'wb');
foreach ( $data as $line ) {
$val = explode(",", $line);
fputcsv($fp, $val);
}
fclose($fp);
@ La réponse de Baba est géniale. Mais vous n'avez pas besoin d'utiliser explode
car fputcsv
prend un tableau en paramètre
Par exemple, si vous avez un document à trois colonnes et quatre lignes, voici une version plus simple:
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="sample.csv"');
$user_CSV[0] = array('first_name', 'last_name', 'age');
// very simple to increment with i++ if looping through a database result
$user_CSV[1] = array('Quentin', 'Del Viento', 34);
$user_CSV[2] = array('Antoine', 'Del Torro', 55);
$user_CSV[3] = array('Arthur', 'Vincente', 15);
$fp = fopen('php://output', 'wb');
foreach ($user_CSV as $line) {
// though CSV stands for "comma separated value"
// in many countries (including France) separator is ";"
fputcsv($fp, $line, ',');
}
fclose($fp);