122 votes

Comment créer et télécharger un fichier csv à partir de php script ?

Je suis un programmeur débutant et j'ai beaucoup cherché à propos de ma question mais je n'ai pas trouvé de solution ou de tutoriel utile à ce sujet.

Mon but est d'avoir un tableau PHP et les éléments du tableau sont affichés dans une liste sur la page.

Je veux ajouter une option, pour que si un utilisateur le souhaite, il puisse créer un fichier CSV avec des éléments de tableau et le télécharger.

Je ne sais pas comment faire. J'ai aussi beaucoup cherché. Mais je n'ai pas encore trouvé de ressource utile.

Veuillez me fournir un tutoriel, une solution ou un conseil pour le mettre en œuvre moi-même. Comme je suis un novice, veuillez me fournir des solutions faciles à mettre en œuvre.

Mon tableau ressemble à ça :

Array
(
    [0] => Array
        (
            [fs_id] => 4c524d8abfc6ef3b201f489c
            [name] => restaurant
            [lat] => 40.702692
            [lng] => -74.012869
            [address] => new york
            [postalCode] => 
            [city] => NEW YORK
            [state] => ny
            [business_type] => BBQ Joint
            [url] => 
        )

)

3voto

half-fast Points 182

Si la structure de votre tableau sera toujours multidimensionnelle de cette manière exacte, alors nous pouvons itérer à travers les éléments de cette manière :

$fh = fopen('somefile.csv', 'w') or die('Cannot open the file');

for( $i=0; $i<count($arr); $i++ ){
    $str = implode( ',', $arr[$i] );
    fwrite( $fh, $str );
    fwrite( $fh, "\n" );
}
fclose($fh);

C'est une façon de procéder... vous pourriez le faire manuellement, mais cette méthode est plus rapide et plus facile à comprendre et à lire.

Ensuite, vous gérerez vos en-têtes de la même manière que complex857 pour extraire le fichier. Vous pourriez ensuite supprimer le fichier en utilisant délier() si vous n'en avez plus besoin, ou vous pouvez le laisser sur le serveur si vous le souhaitez.

2voto

Mise à jour pour l'encodage UTF-8

====================================

Mise à jour de la réponse de @complex857

function array_to_csv_download($array, $filename = "export.csv", $delimiter=",") {
    header('Content-Disposition: attachment; filename="'.$filename.'";');
    header('Content-Type: application/csv; charset=UTF-8');

    // open the "output" stream
    $f = fopen('php://output', 'w');
    // Write utf-8 bom to the file
    fputs($f, chr(0xEF) . chr(0xBB) . chr(0xBF));

    foreach ($array as $line) {
        fputcsv($f, $line, $delimiter);
    }
}  

Le code est peut-être un peu laid, mais il fonctionne !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X