Trabalhando com CSV em PHP: leitura, escrita e processamento de dados

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com CSV em PHP: guia completo



CSV (Comma-Separated Values) — um dos formatos mais populares para troca de dados tabulares. O PHP possui tanto funções nativas para trabalhar com CSV quanto poderosas bibliotecas de terceiros. Neste artigo, abordaremos todas as principais formas de ler, escrever e processar arquivos CSV em PHP.



Funções nativas do PHP para trabalhar com CSV



O PHP oferece várias funções nativas que permitem trabalhar com arquivos CSV sem instalar bibliotecas adicionais. As principais são:



  • fgetcsv() — lê uma linha de um arquivo e a converte em um array
  • fputcsv() — escreve um array em um arquivo no formato CSV
  • str_getcsv() — converte uma string CSV em um array


Lendo um arquivo CSV com fgetcsv



A função fgetcsv() lê uma linha de um arquivo aberto e a retorna como um array. Exemplo de leitura de um arquivo inteiro:



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

if (($handle = fopen($filename, 'r')) !== false) { while (($data = fgetcsv($handle, 1000, ',')) !== false) { // $data — array com os dados da linha echo implode(' | ', $data) . ""; } fclose($handle);}?>


Parâmetros da função fgetcsv():

  • handle — descritor do arquivo
  • length — comprimento máximo da linha (geralmente 0 ou 1000)
  • separator — delimitador de campos (padrão é vírgula)
  • enclosure — caractere de encapsulamento de campos (padrão é aspas duplas)
  • escape — caractere de escape (padrão é barra invertida)


Escrevendo dados em um arquivo CSV



Para escrever, usa-se a função fputcsv(). Ela recebe um array e o converte em uma string CSV:



<?php$data = [    ['Nome', 'Idade', 'Cidade'],    ['João', 25, 'São Paulo'],    ['Maria', 30, 'Rio de Janeiro'],];

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

foreach ($data as $row) { fputcsv($handle, $row, ';', '"');}

fclose($handle);echo "Arquivo $filename criado com sucesso!";?>


Neste exemplo, usamos ponto e vírgula (;) como delimitador, algo comum em arquivos CSV em português.



Processando arquivos CSV grandes



Ao trabalhar com arquivos grandes (centenas de milhares de linhas), é importante não carregar o arquivo inteiro na memória. Use a leitura linha por linha:



<?phpfunction processLargeCSV($filename) {    $handle = fopen($filename, 'r');        // Pula o cabeçalho, se existir    $header = fgetcsv($handle);        while (($row = fgetcsv($handle)) !== false) {        // Processa cada linha        $processed = array_map('trim', $row);        // Sua lógica de processamento aqui        yield $processed; // Usa gerador    }        fclose($handle);}

// Usoforeach (processLargeCSV('bigdata.csv') as $row) { // Trabalha com cada linha individualmente echo "Linha processada: " . implode(',', $row) . "";}?>


O uso de geradores (yield) permite processar arquivos de qualquer tamanho sem estourar a memória.



Biblioteca League\\Csv para trabalho avançado



Para tarefas mais complexas, recomenda-se usar a biblioteca league/csv. Ela oferece uma interface orientada a objetos conveniente e muitos recursos adicionais.



Instalação via Composer:

composer require league/csv


Exemplo de uso:



<?phprequire 'vendor/autoload.php';

use League\\Csv\\Reader;use League\\Csv\\Writer;

// Leitura de CSV$csv = Reader::createFromPath('data.csv', 'r');$csv->setHeaderOffset(0); // Primeira linha é o cabeçalho

// Obtém todos os registros como array associativo

Recommendations