web-dev-qa-db-fra.com

Créer un fichier csv avec php

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!

42
andrei.godea

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);
92
Baba

@ 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);
45
Buzut