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 fichierfputcsv()— é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 fichierlength— 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 fichierfields— tableau des champs à écrireseparator— séparateur de champsenclosure— caractère de guillemetescape— 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, Aussi dans la bibliothèque
Planificateur de tâches sur Node.js (node-cron, node-schedule, Bull)
Nodemailer JavaScript (Node.js) : guide complet avec exemples
node-cron : Planificateur de tâches pour JavaScript (Node.js)
ORM pour Kotlin : comparaison d'Exposed, Room et Ktorm avec exemples
Autorisation et authentification en Swift (iOS/macOS) : guide complet