Trabajo con CSV en PHP: lectura, escritura y procesamiento de datos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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

Recommendations