Trabalho 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

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



O formato CSV (Comma-Separated Values) continua sendo uma das formas mais populares de troca de dados tabulares. O PHP fornece funções nativas para trabalhar com este formato, tornando-o a escolha ideal para importação/exportação de dados, integração com CRM, sistemas contábeis e geração de relatórios. Neste artigo, abordaremos o ciclo completo de trabalho com CSV: desde a abertura do arquivo até o tratamento de casos complexos com escape e codificações.



Funções principais do PHP para trabalhar com CSV



O PHP possui duas funções-chave: fgetcsv() para leitura e fputcsv() para escrita. Elas lidam automaticamente com delimitadores, aspas e escape.



Leitura de arquivo CSV linha por linha



Exemplo básico de leitura de CSV com fgetcsv():



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

if (($handle = fopen($filename, 'r')) !== false) { // Lê os cabeçalhos (primeira linha) $headers = fgetcsv($handle, 1000, ','); if ($headers !== false) { echo "Cabeçalhos: " . implode(', ', $headers) . "<br>"; // Lê os dados linha por linha while (($row = fgetcsv($handle, 1000, ',')) !== false) { echo "Linha: " . implode(' | ', $row) . "<br>"; } } fclose($handle);}?>


Parâmetros do fgetcsv():

  • handle — descritor do arquivo (resultado do fopen)
  • length — comprimento máximo da linha (recomendado 0 para detecção automática)
  • separator — delimitador de campos (padrão vírgula)
  • enclosure — caractere de aspas (padrão aspas duplas)
  • escape — caractere de escape (padrão barra invertida)


Escrita de dados em CSV



A função fputcsv() formata automaticamente a linha com o escape correto:



<?php$data = [    ['ID', 'Nome', 'Email', 'Data de registro'],    [1, 'João Silva', 'joao@example.com', '2024-01-15'],    [2, 'Maria Santos', 'maria@example.com', '2024-02-20'],    [3, 'Alex "Professor" Oliveira', 'alex@example.com', '2024-03-10']];

$filename = 'users.csv';

if (($handle = fopen($filename, 'w')) !== false) { // Escreve BOM para exibição correta de caracteres cirílicos no Excel fwrite($handle, "\\xEF\\xBB\\xBF"); foreach ($data as $row) { fputcsv($handle, $row, ';'); // Usa ponto e vírgula para Excel } fclose($handle); echo "Arquivo $filename criado com sucesso!";}?>


Processamento de grandes arquivos CSV



Ao trabalhar com arquivos grandes (centenas de milhares de linhas), é importante não carregar todo o arquivo na memória. Use processamento em fluxo:



<?phpfunction processLargeCSV($filename, callable $callback) {    $handle = fopen($filename, 'r');    if ($handle === false) {        throw new Exception("Não foi possível abrir o arquivo: $filename");    }        $headers = fgetcsv($handle, 0, ',');    if ($headers === false) {        fclose($handle);        throw new Exception("Arquivo vazio ou erro ao ler cabeçalhos");    }        $rowNumber = 1;    while (($row = fgetcsv($handle, 0, ',')) !== false) {        if (count($row) !== count($headers)) {            // Pula linhas com número incorreto de campos            continue;        }                // Combina cabeçalhos com dados        $assocRow = array_combine($headers, $row);        call_user_func($callback, $assocRow, $rowNumber);        $rowNumber++;    }        fclose($handle);}

// Uso:processLargeCSV('bigdata.csv', function($row, $number) { echo "Linha #$number: {$row['email']} - {$row['name']}<br>";});?>


Trabalhando com diferentes delimitadores e codificações



Frequentemente, arquivos CSV fa

Recommendations