Postado em 11 de janeiro de 2016
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