Leia um arquivo linha por linha com PHP

Existem duas razões pelas quais você pode querer ler um arquivo linha por linha com PHP. A primeira é que o projeto em que você está trabalhando exige que você processe o arquivo uma linha de cada vez. A segunda é que você está lendo um arquivo muito grande e a única maneira de lê-lo sem ultrapassar o limite de memória é fazê-lo uma linha de cada vez.

Usando file() para ler o arquivo

Você pode usar o file() função em PHP para ler o arquivo inteiro de uma vez em uma matriz. Os elementos do array são linhas individuais do arquivo. Assim, você poderá iterar sobre as linhas do arquivo iterando sobre a matriz. A função aceita três parâmetros:

  • nome do arquivo: Este é o arquivo que você deseja ler. Você também pode fornecer um URL como nome de arquivo.
  • bandeiras: Este é um parâmetro opcional e pode ser definido para um ou mais dos seguintes valores constantes: FILE_USE_INCLUDE_PATH, FILE_IGNORE_NEW_LINES e FILE_SKIP_EMPTY_LINES.
  • contexto: Este também é um parâmetro opcional usado para modificar o comportamento de um fluxo.

Estaremos usando o FILE_SKIP_EMPTY_LINES sinalizador para pular todas as linhas vazias em um arquivo. Você também pode querer usar FILE_IGNORE_NEW_LINES para remover terminações de linha de linhas individuais.

Esta função retorna um array com o conteúdo do arquivo em caso de sucesso e false mediante falha. Você também receberá um E_WARNING erro de nível se o arquivo não existir. Aqui está um exemplo de uso desta função.

A saída do código acima é assim:

Você pode ver que existem algumas linhas vazias na saída, podemos nos livrar delas usando o FILE_SKIP_EMPTY_LINES bandeira. Além disso, pode não ser evidente, mas as linhas acima incluem o caractere de nova linha. É por isso que não tivemos que adicionar um caractere de nova linha próprio enquanto repetimos as linhas. Você pode se livrar das linhas em branco usando o FILE_IGNORE_NEW_LINES bandeira.

A saída com esses sinalizadores ficará assim:

Usando o file() function é uma maneira fácil de ler um arquivo linha por linha no PHP se você não estiver preocupado com o uso da memória. No entanto, você terá que ser mais criativo se o uso de memória for um problema porque file() lê o arquivo inteiro em uma matriz de uma só vez.

Usando fgets() para ler o arquivo

Outra maneira de ler um arquivo linha por linha com PHP é usar o fgets() função. Ele tem um parâmetro obrigatório que é um identificador de arquivo válido. Nós usaremos o fopen() função para obter acesso ao identificador de arquivo. Aqui está o código que vamos executar:

Na primeira linha, abrimos nosso arquivo em modo somente leitura. Então, definimos uma função que aceita um $file_handle como parâmetro e devolve uma única linha. Observe que estamos usando um yield declaração e nossa função get_all_lines() é uma função geradora. Você pode querer ler sobre funções geradoras em PHP se você não as usou antes.

Estamos usando o feof() funcionar dentro get_all_lines() para verificar se nosso ponteiro de arquivo atingiu o fim do arquivo. Nós só cedemos enquanto não estamos no final do arquivo. Você deve obter a seguinte saída executando o código acima:

As saídas são as mesmas da nossa seção anterior. A única diferença desta vez é que você não corre mais o risco de ficar sem memória.

Eu mencionei anteriormente que fgets() permitirá que você leia uma linha do arquivo por vez e requer apenas um único parâmetro que aponte para o ponteiro do arquivo que você deseja ler. O consumo de memória neste caso dependeria do comprimento da linha e há uma pequena chance de você ficar sem memória.

No entanto, digamos que você esteja lendo um arquivo de texto que contém linhas extraordinariamente longas. Você pode então passar um segundo parâmetro opcional para o fgets() função que especifica o número de caracteres que você deseja ler. Em seguida, será lido length - 1 bytes do arquivo antes de parar. Ele irá parar mais cedo se encontrar uma nova linha ou fim de arquivo. Isso lhe dá mais controle sobre o consumo de memória do seu código.

Pensamentos finais

Eu discuti dois métodos de leitura de um arquivo linha por linha com PHP neste tutorial. Existem mais algumas maneiras de fazer isso, mas essas duas atenderão a quase todas as suas necessidades. Use o file() funcionar quando o consumo de memória não for um problema e usar fgets() com uma função de gerador se você quiser economizar memória.

Deixe uma resposta