Contar número de linhas de um arquivo de texto com PHP

Palavras

Contar número de linhas de um arquivo de texto com PHP

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

Contar o número de linhas existentes em um arquivo de texto pode parecer uma tarefa trivial, mas nem sempre é. Dependendo da maneira que você optar por fazer isso, pode acabar comprometendo o desempenho do servidor. Geralmente utilizamos essas técnicas para contar o número de linhas em arquivos txt, mas você pode utilizar em qualquer arquivo que contenha texto.

Técnica para contar linhas de arquivos pequenos

Se você tiver que contar o número de linhas de um arquivo pequeno, você pode utilizar uma combinação das funções file(), que carregará todo o arquivo na memória em formato de array e count(), que contará o número de índices no array (equivalente ao número de linhas).

O código fica mais ou menos assim:

$linhas = count( file( '/caminho/para/o/arquivo.txt' ) );

Importante: como o conteúdo é completamente carregado na memória, arquivos grandes irão demandar muito espaço e processamento. Não utilize essa técnica em arquivos pesados para não sobrecarregar o seu servidor.

Técnica para contagem de linhas em qualquer arquivo de texto

Você pode utilizar um ponteiro para contar o número de linhas em um arquivo de texto sem precisar carregá-lo completamente na memória. Basicamente o que você fará as seguintes etapas:

  • Carregar um ponteiro de leitura na memória utilizando fopen();
  • Usar fgets() para ler linha por linha, desprezando o valor da linha e ficando apenas com a contagem das mesmas;
  • Aguardar feof() retornar true, indicando que a leitura chegou no final do arquivo (EOF = End Of File);
  • Utilizar fclose() para encerrar o ponteiro e liberar o arquivo.

Dessa forma, separei duas abordagens, uma mais didática e outra mais concisa:

$linhas = 0; // Número inicial de linhas contadas
$arquivo = fopen('/caminho/para/o/arquivo.txt', 'r'); // Carrega o ponteiro

while ( !feof( $arq ) ) { // Enquanto não chegar ao final do arquivo...
    fgets( $arq ); // Perceba que o conteúdo não é colocado em nenhuma variável, pois não interessa à contagem
    $linhas++; // Aumenta a contagem de linhas
}

fclose( $arq ); // Encerra o ponteiro e libera o arquivo

Se quiser uma versão mais resumida, pode utilizar for:

for ($linhas = 0, $arq = fopen('/caminho/arquivo.txt', 'r'); !feof($arq); $linhas++)
    fgets( $linhas );
fclose( $fp);

Se tiver problema com as funções de arquivos, pode consultar o registro de fopen() manual do PHP para encontrar mais informações.

Não deixem de comentar na postagem se tiverem dúvidas.

Um abraço a todos e fiquem com Deus.
Rafael Jaques