Trabajo con CSV en PHP: lectura, escritura y procesamiento de datos
El formato CSV (Valores Separados por Comas) sigue siendo una de las formas más populares de intercambiar datos tabulares. PHP proporciona funciones integradas para trabajar con este formato, lo que lo convierte en una opción ideal para importar/exportar datos, integrarse con CRM, sistemas contables y generar informes. En este artículo, analizaremos el ciclo completo de trabajo con CSV: desde abrir un archivo hasta manejar casos complejos con escape y codificaciones.
Funciones principales de PHP para trabajar con CSV
PHP tiene dos funciones clave: fgetcsv() para lectura y fputcsv() para escritura. Manejan automáticamente separadores, comillas y escape.
Lectura de un archivo CSV línea por línea
Ejemplo básico de lectura de CSV con fgetcsv():
<?php$filename = 'data.csv';
if (($handle = fopen($filename, 'r')) !== false) { // Leemos los encabezados (primera línea) $headers = fgetcsv($handle, 1000, ','); if ($headers !== false) { echo "Encabezados: " . implode(', ', $headers) . "<br>"; // Leemos los datos línea por línea while (($row = fgetcsv($handle, 1000, ',')) !== false) { echo "Fila: " . implode(' | ', $row) . "<br>"; } } fclose($handle);}?>Parámetros de fgetcsv():
handle— descriptor de archivo (resultado de fopen)length— longitud máxima de la línea (se recomienda 0 para detección automática)separator— separador de campos (por defecto coma)enclosure— carácter de comillas (por defecto comillas dobles)escape— carácter de escape (por defecto barra invertida)
Escritura de datos en CSV
La función fputcsv() formatea automáticamente la línea con el escape correcto:
<?php$data = [ ['ID', 'Nombre', 'Email', 'Fecha de registro'], [1, 'Iván Petrov', 'ivan@example.com', '2024-01-15'], [2, 'María Sidorova', 'maria@example.com', '2024-02-20'], [3, 'Alexey "Profesor" Ivanov', 'alex@example.com', '2024-03-10']];
$filename = 'users.csv';
if (($handle = fopen($filename, 'w')) !== false) { // Escribimos BOM para la correcta visualización de cirílico en Excel fwrite($handle, "\\xEF\\xBB\\xBF"); foreach ($data as $row) { fputcsv($handle, $row, ';'); // Usamos punto y coma para Excel } fclose($handle); echo "¡Archivo $filename creado exitosamente!";}?>Procesamiento de archivos CSV grandes
Al trabajar con archivos grandes (cientos de miles de líneas), es importante no cargar todo el archivo en memoria. Utilice procesamiento por flujo:
<?phpfunction processLargeCSV($filename, callable $callback) { $handle = fopen($filename, 'r'); if ($handle === false) { throw new Exception("No se pudo abrir el archivo: $filename"); } $headers = fgetcsv($handle, 0, ','); if ($headers === false) { fclose($handle); throw new Exception("Archivo vacío o error al leer los encabezados"); } $rowNumber = 1; while (($row = fgetcsv($handle, 0, ',')) !== false) { if (count($row) !== count($headers)) { // Omitimos líneas con número incorrecto de campos continue; } // Combinamos encabezados con datos $assocRow = array_combine($headers, $row); call_user_func($callback, $assocRow, $rowNumber); $rowNumber++; } fclose($handle);}
// Uso:processLargeCSV('bigdata.csv', function($row, $number) { echo "Fila #$number: {$row['email']} - {$row['name']}<br>";});?>Trabajo con diferentes separadores y codificaciones
A menudo, los archivos CSV fa
También en la biblioteca
Doctrine DBAL PHP: guía completa con ejemplos prácticos
Generación de PDF en PHP: mejores bibliotecas y ejemplos de código
Serialización de objetos en TypeScript: bibliotecas, métodos y ejemplos
Contenedor de Dependency Injection para C# (.NET) — guía completa
Machine Learning en Go: revisión de bibliotecas para Golang