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. En PHP, le travail avec CSV est implémenté nativement, sans installation de bibliothèques supplémentaires. Dans cet article, nous aborderons tous les aspects : de la lecture de base au traitement avancé des fichiers volumineux.



Fonctions principales pour travailler avec CSV



PHP fournit deux fonctions clés pour travailler avec CSV :

  • fgetcsv() — lecture d'une ligne CSV depuis un fichier
  • fputcsv() — écriture d'une ligne au format CSV


En complément, les fonctions standard de gestion des fichiers sont utilisées : fopen(), fclose(), file().



Lecture d'un fichier CSV en PHP



La façon la plus simple de lire un CSV est d'utiliser une boucle while avec fgetcsv() :



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

if (($handle = fopen($filename, 'r')) !== false) { // Lecture des en-têtes (première ligne) $headers = fgetcsv($handle, 1000, ','); // Lecture des lignes suivantes while (($row = fgetcsv($handle, 1000, ',')) !== false) { echo "Nom : " . $row[0] . ", Email : " . $row[1] . "<br>"; } fclose($handle);}?>


Paramètres de fgetcsv() :

  • handle — descripteur de fichier
  • length — longueur maximale de la ligne (par défaut 0 — sans limite)
  • separator — séparateur de champs (par défaut la virgule)
  • enclosure — caractère de guillemet (par défaut les guillemets doubles)
  • escape — caractère d'échappement (par défaut l'antislash)


Lecture d'un CSV avec des séparateurs personnalisés



Tous les CSV n'utilisent pas la virgule. On rencontre souvent le point-virgule (;) ou la tabulation :



<?php$handle = fopen('data.tsv', 'r');while (($row = fgetcsv($handle, 1000, "\\t")) !== false) {    print_r($row);}fclose($handle);?>


Écriture de données en CSV



La fonction fputcsv() gère automatiquement l'échappement et les guillemets :



<?php$data = [    ['Ivan', 'ivan@example.com', 25],    ['Maria', 'maria@example.com', 30],    ['Pierre', 'petr@example.com', 28]];

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

// Écriture des en-têtesfputcsv($handle, ['Nom', 'Email', 'Âge']);

// Écriture des donnéesforeach ($data as $row) { fputcsv($handle, $row);}

fclose($handle);echo "Fichier CSV créé avec succès !";?>


Paramètres de fputcsv() :

  • handle — descripteur de fichier
  • fields — tableau des champs à écrire
  • separator — séparateur de champs
  • enclosure — caractère de guillemet
  • escape — caractère d'échappement


Export de données en CSV pour téléchargement



Il est souvent nécessaire de générer un CSV et de le proposer au téléchargement pour l'utilisateur :



<?php$data = [    ['Produit', 'Prix', 'Quantité'],    ['Ordinateur portable', 75000, 10],    ['Souris', 1500, 50],    ['Clavier', 3500, 30]];

header('Content-Type: text/csv; charset=utf-8');header('Content-Disposition: attachment; filename="products.csv"');

$output = fopen('php://output', 'w');// Ajout du BOM pour un affichage correct du cyrillique dans Excelfprintf($output, chr(0xEF).chr(0xBB).chr(0xBF));

foreach ($data as $row) { fputcsv($output, $row);}

fclose($output);exit;?>


Traitement des fichiers CSV volumineux



Lors du travail avec des fichiers volumineux (des centaines de milliers de lignes), il est important d'éviter de charger tout le fichier en mémoire. Utilisez un traitement par flux :



<?phpfunction processLargeCSV($filename, $batchSize = 1000) {    $handle = fopen($filename,                    

Recommendations