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: guía completa



CSV (Comma-Separated Values) es uno de los formatos más populares para el intercambio de datos tabulares. En PHP, el trabajo con CSV está implementado de forma nativa, sin necesidad de instalar bibliotecas adicionales. En este artículo, analizaremos todos los aspectos: desde la lectura básica hasta el procesamiento avanzado de archivos grandes.



Funciones principales para trabajar con CSV



PHP proporciona dos funciones clave para trabajar con CSV:

  • fgetcsv() — lectura de una línea CSV desde un archivo
  • fputcsv() — escritura de una línea en formato CSV


Adicionalmente, se utilizan funciones estándar de manejo de archivos: fopen(), fclose(), file().



Lectura de un archivo CSV en PHP



La forma más sencilla de leer un CSV es usar un bucle while con fgetcsv():



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

if (($handle = fopen($filename, 'r')) !== false) { // Leemos los encabezados (primera línea) $headers = fgetcsv($handle, 1000, ','); // Leemos las líneas restantes while (($row = fgetcsv($handle, 1000, ',')) !== false) { echo "Nombre: " . $row[0] . ", Email: " . $row[1] . "<br>"; } fclose($handle);}?>


Parámetros de fgetcsv():

  • handle — descriptor de archivo
  • length — longitud máxima de la línea (por defecto 0 — sin límite)
  • separator — delimitador de campos (por defecto coma)
  • enclosure — carácter de comillas (por defecto comillas dobles)
  • escape — carácter de escape (por defecto barra invertida)


Lectura de CSV con delimitadores personalizados



No todos los CSV usan coma. A menudo se encuentra punto y coma (;) o tabulación:



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


Escritura de datos en CSV



La función fputcsv() maneja automáticamente el escape y las comillas:



<?php$data = [    ['Iván', 'ivan@example.com', 25],    ['María', 'maria@example.com', 30],    ['Pedro', 'petr@example.com', 28]];

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

// Escribimos los encabezadosfputcsv($handle, ['Nombre', 'Email', 'Edad']);

// Escribimos los datosforeach ($data as $row) { fputcsv($handle, $row);}

fclose($handle);echo "¡Archivo CSV creado exitosamente!";?>


Parámetros de fputcsv():

  • handle — descriptor de archivo
  • fields — array de campos a escribir
  • separator — delimitador de campos
  • enclosure — carácter de comillas
  • escape — carácter de escape


Exportación de datos a CSV para descarga



A menudo es necesario generar un CSV y entregarlo al usuario para su descarga:



<?php$data = [    ['Producto', 'Precio', 'Cantidad'],    ['Portátil', 75000, 10],    ['Ratón', 1500, 50],    ['Teclado', 3500, 30]];

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

$output = fopen('php://output', 'w');// Agregamos BOM para la correcta visualización de caracteres cirílicos en Excelfprintf($output, chr(0xEF).chr(0xBB).chr(0xBF));

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

fclose($output);exit;?>


Procesamiento de archivos CSV grandes



Al trabajar con archivos grandes (cientos de miles de líneas), es importante evitar cargar todo el archivo en memoria. Utilice procesamiento por flujo:



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

Recommendations