Travailler avec CSV en PHP : lecture, écriture et traitement des données
Le format CSV (Comma-Separated Values) reste l'un des moyens les plus populaires d'échanger des données tabulaires. PHP fournit des fonctions intégrées pour travailler avec ce format, ce qui en fait un choix idéal pour l'import/export de données, l'intégration avec les CRM, les systèmes comptables et la génération de rapports. Dans cet article, nous allons aborder le cycle complet du travail avec CSV : de l'ouverture du fichier au traitement des cas complexes avec échappement et encodages.
Fonctions PHP principales pour travailler avec CSV
PHP dispose de deux fonctions clés : fgetcsv() pour la lecture et fputcsv() pour l'écriture. Elles gèrent automatiquement les séparateurs, les guillemets et l'échappement.
Lecture ligne par ligne d'un fichier CSV
Exemple de base de lecture d'un CSV avec fgetcsv() :
<?php$filename = 'data.csv';
if (($handle = fopen($filename, 'r')) !== false) { // Lecture des en-têtes (première ligne) $headers = fgetcsv($handle, 1000, ','); if ($headers !== false) { echo "En-têtes : " . implode(', ', $headers) . "<br>"; // Lecture des données ligne par ligne while (($row = fgetcsv($handle, 1000, ',')) !== false) { echo "Ligne : " . implode(' | ', $row) . "<br>"; } } fclose($handle);}?>Paramètres de fgetcsv() :
handle— descripteur de fichier (résultat de fopen)length— longueur maximale de la ligne (recommandé 0 pour la détection automatique)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)
Écriture de données dans un CSV
La fonction fputcsv() formate automatiquement la ligne avec un échappement correct :
<?php$data = [ ['ID', 'Nom', 'Email', 'Date d\'inscription'], [1, 'Ivan Petrov', 'ivan@example.com', '2024-01-15'], [2, 'Maria Sidorova', 'maria@example.com', '2024-02-20'], [3, 'Alexei "Professeur" Ivanov', 'alex@example.com', '2024-03-10']];
$filename = 'users.csv';
if (($handle = fopen($filename, 'w')) !== false) { // Écriture du BOM pour un affichage correct du cyrillique dans Excel fwrite($handle, "\\xEF\\xBB\\xBF"); foreach ($data as $row) { fputcsv($handle, $row, ';'); // Utilisation du point-virgule pour Excel } fclose($handle); echo "Le fichier $filename a été créé avec succès !";}?>Traitement de gros fichiers CSV
Lors du traitement de gros fichiers (des centaines de milliers de lignes), il est important de ne pas charger tout le fichier en mémoire. Utilisez un traitement par flux :
<?phpfunction processLargeCSV($filename, callable $callback) { $handle = fopen($filename, 'r'); if ($handle === false) { throw new Exception("Impossible d'ouvrir le fichier : $filename"); } $headers = fgetcsv($handle, 0, ','); if ($headers === false) { fclose($handle); throw new Exception("Fichier vide ou erreur de lecture des en-têtes"); } $rowNumber = 1; while (($row = fgetcsv($handle, 0, ',')) !== false) { if (count($row) !== count($headers)) { // Ignorer les lignes avec un nombre incorrect de champs continue; } // Combiner les en-têtes avec les données $assocRow = array_combine($headers, $row); call_user_func($callback, $assocRow, $rowNumber); $rowNumber++; } fclose($handle);}
// Utilisation :processLargeCSV('bigdata.csv', function($row, $number) { echo "Ligne #$number : {$row['email']} - {$row['name']}<br>";});?>Travail avec différents séparateurs et encodages
Souvent, les fichiers CSV
Aussi dans la bibliothèque
Files d'attente de tâches en TypeScript : aperçu des bibliothèques et implémentation
JavaMail (Jakarta Mail) Java : guide complet avec exemples
gRPC pour C# (.NET) : bibliothèques, configuration et exemples de code
Travailler avec Excel en C# (.NET) : bibliothèques EPPlus, ClosedXML et NPOI