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

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