Travailler avec CSV en PHP : lecture, écriture et traitement des données

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec CSV en PHP : guide complet



CSV (Comma-Separated Values) est l'un des formats les plus populaires pour l'échange de données tabulaires. PHP dispose à la fois de fonctions intégrées pour travailler avec CSV et de puissantes bibliothèques tierces. Dans cet article, nous allons passer en revue toutes les principales méthodes de lecture, d'écriture et de traitement des fichiers CSV en PHP.



Fonctions PHP intégrées pour travailler avec CSV



PHP fournit plusieurs fonctions intégrées qui permettent de travailler avec des fichiers CSV sans installer de bibliothèques supplémentaires. Les principales sont :



  • fgetcsv() — lecture d'une ligne depuis un fichier et son analyse en tableau
  • fputcsv() — écriture d'un tableau dans un fichier au format CSV
  • str_getcsv() — analyse d'une chaîne CSV en tableau


Lecture d'un fichier CSV avec fgetcsv



La fonction fgetcsv() lit une ligne d'un fichier ouvert et la retourne sous forme de tableau. Exemple de lecture d'un fichier entier :



<?php$filename = 'data.csv';

if (($handle = fopen($filename, 'r')) !== false) { while (($data = fgetcsv($handle, 1000, ',')) !== false) { // $data — tableau contenant les données de la ligne echo implode(' | ', $data) . ""; } fclose($handle);}?>


Paramètres de la fonction fgetcsv() :

  • handle — descripteur de fichier
  • length — longueur maximale de la ligne (généralement 0 ou 1000)
  • separator — séparateur de champs (par défaut la virgule)
  • enclosure — caractère d'encadrement des champs (par défaut le guillemet double)
  • escape — caractère d'échappement (par défaut l'antislash)


Écrire des données dans un fichier CSV



Pour l'écriture, on utilise la fonction fputcsv(). Elle prend un tableau et le convertit en chaîne CSV :



<?php$data = [    ['Nom', 'Âge', 'Ville'],    ['Ivan', 25, 'Moscou'],    ['Maria', 30, 'Saint-Pétersbourg'],];

$filename = 'output.csv';$handle = fopen($filename, 'w');

foreach ($data as $row) { fputcsv($handle, $row, ';', '"');}

fclose($handle);echo "Le fichier $filename a été créé avec succès !";?>


Dans cet exemple, nous utilisons le point-virgule (;) comme séparateur, ce qui est courant dans les fichiers CSV russophones.



Traitement de gros fichiers CSV



Lorsqu'on travaille avec de gros fichiers (des centaines de milliers de lignes), il est important de ne pas charger tout le fichier en mémoire. Utilisez la lecture ligne par ligne :



<?phpfunction processLargeCSV($filename) {    $handle = fopen($filename, 'r');        // On saute l'en-tête s'il existe    $header = fgetcsv($handle);        while (($row = fgetcsv($handle)) !== false) {        // On traite chaque ligne        $processed = array_map('trim', $row);        // Votre logique de traitement peut être ici        yield $processed; // Utilisation d'un générateur    }        fclose($handle);}

// Utilisationforeach (processLargeCSV('bigdata.csv') as $row) { // On travaille avec chaque ligne individuellement echo "Ligne traitée : " . implode(',', $row) . "";}?>


L'utilisation de générateurs (yield) permet de traiter des fichiers de n'importe quelle taille sans dépassement de mémoire.



Bibliothèque League\\Csv pour un travail avancé



Pour des tâches plus complexes, il est recommandé d'utiliser la bibliothèque league/csv. Elle offre une interface orientée objet pratique et de nombreuses fonctionnalités supplémentaires.



Installation via Composer :

composer require league/csv


Exemple d'utilisation :



<?phprequire 'vendor/autoload.php';

use League\\Csv\\Reader;use League\\Csv\\Writer;

// Lecture CSV$csv = Reader::createFromPath('data.csv', 'r');$csv->setHeaderOffset(0); // Première ligne — en-tête

// Obtention de tous les enregistrements sous forme de tableau associatif

Recommendations